agrupar informações do banco de dados

29/01/2018

4

Boa noite Srs,
Será que podem me ajudar....
preciso que o banco de dados traga para mim as informações(nomes)de todos os clientes de uma tabela
e através desta traga informações de todas as compras feitas por essa pessoa.

no mysql está assim:

exemplo:
tabela1 efetivo:


nome: identidade
paulo 111
joão 222
pedro 333
carlos 444


tabela2 investimento

nome: compras:
paulo maça
joão carne
pedro água
paulo carne
joão carne
joão água



queria que saísse assim

nome: compras:

paulo maça carne
joão carne água (carne aparece so uma vez aqui)
pedro água
carlos (aparece carlos,mas sem nenhuma compra)




o que eu fiz tem saído de um jeito errado
saiu assim

nome: compras:

paulo maça
paulo carne
joão carne
joão água
pedro água
carlos

ou seja, n quero que ele duplique as informações,qria na mesma linha (<td> </td>)
paulo maça carne


e não
paulo maça
paulo carne


se puderem..... ficarei grato...rs
Abraço
Responder

Post mais votado

03/02/2018

Bom dia,

O ideal seria vc mostrar os campos como esta a sua estrutura nas tabelas mas vou lhe da um norte existe uma função no oracle acho que eles esta disponivel tb no MySql é o listagg acho qu no mySql tem o GROUP_CONCAT ficaria mais ou menos assim :

Tente dessa forma:

select a.nome,GROUP_CONCAT(i.compras) compras
from afetivo a , incestimento i
where a.nome = i.nome
group by a.nome


Acredito que aceite tb assim:

select a.nome,LISTAGG(i.compras,',') WITHIN GROUP (ORDER BY NULL) compras
from afetivo a , incestimento i
where a.nome = i.nome
group by a.nome


Responder

Mais Posts

03/02/2018

Paulo Silva

boa tarde Douglas,
obgd pelo apoio.

meu projeto esta assim:

qdo eu digito a identidade
ele joga para esta pagina abaixo...

que mostra uma tabela de dias viajado pela pessoa(variaveis =data_inicio e data_final) e oq estava fazendo(se foi a trabalho ou curso ou outros....variavel=realizacao )

uma tabela(efetivo) tem o nome(variavel=nome) e identidade(variavel=identidade) de todas as pessoas

e uma outra tabela(livro) com o nome(variavel=nome) ,identidade(variavel=identidade),o intervalo de tempo que ficou fora(variaveis data_inicio e data_final)ex.:neste formato:20180203 a 20180210 ano mes dia
e o que foi fazer(variavel=realizacao)

mas so consegui fazer com <textarea>
mas com textarea n consigo trocar as variaveis realizações por imagens ou deixa-las coloridas (por exemplo para receber a variavel realizações = a trabalho( ficara vermelho ,para ferias ficara verde).


a baixo a estrutura php


<tr>
<th>identidade<th>
</tr>
<tr>
<?php
$identidade=$_POST['identidade'];
$result = mysql_query("SELECT DISTINCT(identidade) FROM efetivo where status='ATIVO' and identidade='$identidade' order by prio asc limit 0,18");
if (!$result) {
echo 'Não foi possível executar a consulta: ' . mysql_error();
exit;
}
while($row = mysql_fetch_row($result)){ ?>
<tr>

<td >
echo $row[0];
</td>


<body>
<script type="text/javascript" src="js/wz_tooltip.js"></script>

<TD height='6px'>
<?php

$sql = "SELECT * FROM livro WHERE identidade='$row[0]' and data_inicio <= '20180101' and '20180101' <=data_final ";
$res = mysql_query($sql);
while($linha = mysql_fetch_array($res)){ ?>
<textarea style="border: none;width:70%;height:200% ;color: red;font: bold 9px Arial, Helvetica, sans-serif;resize: none; " rows="1" readonly='readonly' onmouseover="Tip('<?php echo $linha['realizacao'];?>')" onmouseout="UnTip()"/><?php } ?><?php $sql = "SELECT * FROM livro WHERE identidade='$row[0]' ";
$res = mysql_query($sql);
while($linha = mysql_fetch_array($res)){ ?><?php IF( $linha['data_inicio'] <= '20180101' && '20180101' <= $linha['data_final'] ){ ?><?php $parte_realizacao = substr($linha['os'], 0, 2); echo $parte_realizacao; ?><?PHP }
ELSE {}; ?><?php } ?></textarea>


</TD>
<TD height='6px'>
<?php

$sql = "SELECT * FROM livro WHERE identidade='$row[0]' and data_inicio <= '20180102' and '20180102' <=data_final ";
$res = mysql_query($sql);
while($linha = mysql_fetch_array($res)){ ?>
<textarea style="border: none;width:70%;height:200% ;color: red;font: bold 9px Arial, Helvetica, sans-serif;resize: none; " rows="1" readonly='readonly' onmouseover="Tip('<?php echo $linha['realizacao'];?>')" onmouseout="UnTip()"/><?php } ?><?php $sql = "SELECT * FROM livro WHERE identidade='$row[0]' ";
$res = mysql_query($sql);
while($linha = mysql_fetch_array($res)){ ?><?php IF( $linha['data_inicio'] <= '20180102' && '20180102' <= $linha['data_final'] ){ ?><?php $parte_realizacao = substr($linha['realizacao'], 0, 2); echo $parte_realizacao; ?><?PHP }
ELSE {}; ?><?php } ?></textarea>


</TD>

<TD height='6px'>
<?php

$sql = "SELECT * FROM livro WHERE identidade='$row[0]' and data_inicio <= '20180103' and '20180103' <=data_final ";
$res = mysql_query($sql);
while($linha = mysql_fetch_array($res)){ ?>
<textarea style="border: none;width:70%;height:200% ;color: red;font: bold 9px Arial, Helvetica, sans-serif;resize: none; " rows="1" readonly='readonly' onmouseover="Tip('<?php echo $linha['realizacao'];?>')" onmouseout="UnTip()"/><?php } ?><?php $sql = "SELECT * FROM livro WHERE identidade='$row[0]' ";
$res = mysql_query($sql);
while($linha = mysql_fetch_array($res)){ ?><?php IF( $linha['data_inicio'] <= '20180103' && '20180103' <= $linha['data_final'] ){ ?><?php $parte_os = substr($linha['os'], 0, 2); echo $parte_realizacao; ?><?PHP }
ELSE {}; ?><?php } ?></textarea>


</TD>
<!-- e por ai vai ate fechar o ano(fiz na mao mesmo!!!rs dia por dia ate fechar o ano) se tiver uma ideia pra tornar mais pratico sem ser desse jeito manual..aceito..rs

<?php
}

?>


</tr>



e eu n qria ter q usar textarea
pq n consigo depois manipular as variaveis que vao ali pra dentro da textarea
pois se aparecer a palavra ferias poderia trocar por uma imagem de uma praia
ou se aparecesse a palavra a trabalho trocaria por uma imagem de uma empresa...

espero ter explicado direito...rs


Responder

03/02/2018

Paulo Silva

DOUGLAS OBRIGD PELA DIREÇÃO<br />
DEU CERTO<br />
DEI UMA ESTUDADA SOBRE GROUP_CONCAT<br />
<br />
MTO GRATO!!!!!
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários. Para saber mais sobre o uso de cookies,
consulte nossa política de privacidade. Ao continuar navegando em nosso site, você concorda com a nossa política.

Aceitar