Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Anderson Tosatti

Agrupar dados de uma mesma coluna

Recommended Posts

Boa tarde pessoal,

 

Já varri o forum atrás de uma solução e não encontrei nenhuma que desse certo ao meu problema. Gostaria de agrupar dados de um mesmo cliente em que seja exibido o nome do cliente somente uma vez e as contas do período logo abaixo, ao invés de ficar repetindo o nome dele em todas as contas. Tentei usar o GROUP BY, mas ele tá exibindo somente uma linha de cada cliente.

 

Gostaria que ao invés de ficar assim:

 

Favorecido Aca Adrenalina

id Forma de Pagamento Título Descrição Valor Vencimento

140 Boleto SNF042666 Peças p/ estoque R$ 220.00 22/10/2012

Favorecido Aca Adrenalina

id Forma de Pagamento Título Descrição Valor Vencimento

165 Boleto SNF42745 Peças p/ estoque R$ 230.00 22/10/2012

 

Ficasse assim:

 

Favorecido Aca Adrenalina

id Forma de Pagamento Título Descrição Valor Vencimento

140 Boleto SNF042666 Peças p/ estoque R$ 220.00 22/10/2012

165 Boleto SNF42745 Peças p/ estoque R$ 230.00 22/10/2012

 

segue abaixo a query

 
<? $sql = "select * from contasp WHERE vencimento <= '$date' AND enviado != 'S' group by favorecido order by favorecido, vencimento ASC";
$result = mysql_query ($sql, $marechal) or die(mysql_error());
$total = mysql_num_rows ($result); 
while ($linha = mysql_fetch_array ($result)) {

$id = $linha["id"];
$data = $linha["data"];
$favorecido = $linha["favorecido"];
$tipodespesa = $linha["tipodespesa"];
$formapgto = $linha["formapgto"];
$vencimento = $linha["vencimento"];

?>

 

Quem puder ajudar, eu agradeço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

uma sugestão...

1 - faça uma consulta de todos ou de um cliente especifico.

2 - faça outroa consulta tem as contas, jogue o resulta no array de clientes.

 

o array deve ficar assim

 


Array
(
   [cliente] = > '1'
   [contas] => Array
       (
           [0] => array([descricao] => 'lol')
           [1] => array([descricao] => 'abc')
           [2] => array([descricao] => '123')

       )

)

Compartilhar este post


Link para o post
Compartilhar em outros sites

TENTA ISSO, DEVE FUCIONAR:

<table width="100%" border="0">
<tr>
<th width="10%"><b>ID</b></td>
<th width="20%"><b>Forma de pagamento</b></td>
<th width="20%"><b>Titulo</b></td>
<th width="30%"><b>Descrição</b></td>
<th width="10%"><b>Valor</b></td>
<th width="10%"><b>Vencimento</b></td>
</tr>
<?php

$query = $db->execute("select * from contasp WHERE vencimento <= '$date' AND enviado != 'S' group by favorecido order by favorecido, vencimento ASC");

while($cliente = $query->fetchrow())
{
echo "<tr>\n";
echo $cliente['id'];
echo "</td>\n";
echo "<tr>\n";
echo $cliente['formapgto'];
echo "</td>\n";
echo "<tr>\n";
echo $cliente['titulo'];
echo "</td>\n";
echo "<tr>\n";
echo $cliente['descricao'];
echo "</td>\n";
echo "<tr>\n";
echo $cliente['valor'];
echo "</td>\n";
echo "<tr>\n";
echo $cliente['vencimento'];
echo "</td>\n";


}
?>
</table>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Shini, eu entendi mais ou menos a sua solução. A forma que você disse para fazer as duas consultas é para a mesma tabela??

 

Renan, apareceu o seguinte erro:

 

PHP Fatal error: Call to a member function execute() on a non-object in E:\home\marechalvi2\Web\listacontasp.php on line 348

 

348 - $query = $db->execute("select * from contasp WHERE vencimento <= '$date' AND enviado != 'S' group by favorecido order by favorecido, vencimento ASC");

Compartilhar este post


Link para o post
Compartilhar em outros sites

você alterou os dados de acordo com a tabela do banco de dados?

Tipo... no codigo que eu te passei dentro da while tem as linhas que estão assim:

 

echo $cliente['id'];

Dentro da chave você deve colocar o nome da coluna da tabela, entendeu?

ficaria algo assim:

 

<table width="100%" border="0">
<tr>
<th width="10%"><b>ID</b></td>
<th width="20%"><b>Forma de pagamento</b></td>
<th width="20%"><b>Titulo</b></td>
<th width="30%"><b>Descrição</b></td>
<th width="10%"><b>Valor</b></td>
<th width="10%"><b>Vencimento</b></td>
</tr>
<?php

$query = $db->execute("select * from contasp WHERE vencimento <= '$date' AND enviado != 'S' group by favorecido order by favorecido, vencimento ASC");
$result = mysql_query ($sql, $marechal) or die(mysql_error());
$total = mysql_num_rows ($result);

while($cliente = $query->fetchrow())
{
       echo "<tr>\n";
       echo $cliente['tabela_id_do_banco_de_dados'];
       echo "</td>\n";
       echo "<tr>\n";
       echo $cliente['tabela_forma_de_pagamento_do_banco_de_dados'];
       echo "</td>\n";
       echo "<tr>\n";
       echo $cliente['tabela_titulo_do_banco_de_dados'];
       echo "</td>\n";
       echo "<tr>\n";
       echo $cliente['tabela_descrição_do_banco_de_dados'];
       echo "</td>\n";
       echo "<tr>\n";
       echo $cliente['tabela_valor_do_banco_de_dados'];
       echo "</td>\n";
       echo "<tr>\n";
       echo $cliente['tabela_vencimento_do_banco_de_dados'];
       echo "</td>\n";


}
?>
</table>

 

Provavelmente deu esse erro porque o comando fez procurar a tabela "decrição" sendo que deveria procurar "tipodespesa"....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alguém notou que $db->execute é uma instância de uma classe que existe no código do Renan

e não no código do Anderson ou fui só eu? Pelomenos o erro está bem claro quanto a isso não? :rolleyes:

Compartilhar este post


Link para o post
Compartilhar em outros sites

UOU deixa em off periscuelo kkkk

Então Anderson... é só alterar o codigo pra esse:

 

<table width="100%" border="0">
<tr>
<th width="10%"><b>ID</b></td>
<th width="20%"><b>Forma de pagamento</b></td>
<th width="20%"><b>Titulo</b></td>
<th width="30%"><b>Descrição</b></td>
<th width="10%"><b>Valor</b></td>
<th width="10%"><b>Vencimento</b></td>
</tr>

<? $sql = "select * from contasp WHERE vencimento <= '$date' AND enviado != 'S' group by favorecido order by favorecido, vencimento ASC";
$result = mysql_query ($sql, $marechal) or die(mysql_error());
$total = mysql_num_rows ($result);
while($cliente = $query->fetchrow())
{
       echo "<tr>\n";
       echo $cliente['id'];
       echo "</td>\n";
       echo "<tr>\n";
       echo $cliente['formapgto'];
       echo "</td>\n";
       echo "<tr>\n";
       echo $cliente['titulo'];
       echo "</td>\n";
       echo "<tr>\n";
       echo $cliente['descricao'];
       echo "</td>\n";
       echo "<tr>\n";
       echo $cliente['valor'];
       echo "</td>\n";
       echo "<tr>\n";
       echo $cliente['vencimento'];
       echo "</td>\n";


}
?>
</table>

Dessa vez deve funcionar! ^^)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Denovo hein Renan :rolleyes: Pegadinha do malandro há! :yay:

 

É só mais uma classe que o Renan esqueceu de tirar mude

 

while($cliente = $query->fetchrow())

para

 

while($cliente = mysql_fetch_assoc($result))

e no $result deixe assim:

 

$result = mysql_query($sql) or die(mysql_error());

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema agora está só na hora de exibir os dados da maneira que eu gostaria, pois ele está imprimindo somente um resultado de cada cliente ao invés de exibir todos agrupados

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenta essa logica...

 

$clientes = listarClientes();//select na tabela de clientes.
foreach($clientes as $c){
   $c['contas'] = $listarContas($c['id']);//select na tabela de contas
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

posta os campos da tabela.

Compartilhar este post


Link para o post
Compartilhar em outros sites

a tabela está da forma abaixo:

 

<table width="72%" border="1" align="center" cellpadding="0" cellspacing="0">
<tr>

<?php 

$sql = "select * from contasp WHERE vencimento <= '$date' AND enviado != 'S' group by favorecido order by favorecido, vencimento ASC";
$result = mysql_query($sql) or die(mysql_error());
$total = mysql_num_rows ($result);

while($linha = mysql_fetch_array($result)) {

       $id = $linha["id"];
$data = $linha["data"];
$favorecido = $linha["favorecido"];
$tipodespesa = $linha["tipodespesa"];
$formapgto = $linha["formapgto"];
$vencimento = $linha["vencimento"];

?>

 <th bgcolor="#333333">Favorecido  
 <th colspan="5" align="left" bgcolor="#333333">  <?php echo $linha['favorecido']; ?></tr>
<tr>
<th width="10%"><b>ID</b></td>
<th width="20%"><b>Forma de pagamento</b></td>
<th width="17%"><b>Titulo</b></td>
<th width="26%"><b>Descrição</b></td>
<th width="14%"><b>Valor</b></td>
<th width="13%"><b>Vencimento</b></td>
</tr>

<tr>
 <th> <?php echo $linha['id']; ?> 
 <th>  <?php echo $linha['formapgto']; ?>
 <th>  <?php echo $linha['titulo']; ?>
 <th>  <?php echo $linha['descricao']; ?>
 <th>  <?php echo $linha['valor']; ?>
 <th>  <?php echo $linha['vencimento']; ?>
</tr>
<? } ?>
</table>

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.