Joel F 6 Denunciar post Postado Fevereiro 7, 2013 Ola, pessoal estou com um problema, eu até consegui uma solução, mas gostaria de saber se existe uma melhor, pois a minha exige a execusão de varias consultas. Bem, eu tenho uma tabela com nome de pessoas, criei outra tabela com numeros de telefones numa relação 1:n para que possa ser registrado mais de um tel por pessoa. Elas estão ligadas no bd com chave estrangeira e até ai não encotrei problemas. O problema começa quando preciso exibir os dados. Consigo exibir os dados usando inner join. $sql = "SELECT n.*, t.* FROM TabNomes AS n INNER JOIN TabTel as t ON t.nome_id = n.id WHERE n.nome = 'maria'"; $sqr = mysql_query($sql); $registro = mysql_fetch_assoc($sqr); Supondo que o registro maria esteja associado a dois números de tel na tabela tel ex: tel1: 123 e tel2: 456 vai me retornar algo como uma tabela de resultado assim: nome - tel maria - 123 maria - 456 até ai não ha problema o problema surge quando preciso que cada registro gere um codigo html. ex: <?php do { ?> <li> Nome: <?php echo $registro['nome'] ?> Tel: <?php echo $registro['telefone'] ?></li> <?php } while ($registro = mysql_fatch_assoc($sqr)); ?> Esse codigo me retorna : Nome: maria Tel: 123 Nome: maria Tel: 456 Eu precisava que retornasse: Nome: maria Tel: 123 Tel: 456 Nome: joão Tel: 789 Tel: 101 Eu consigo fazer da seguinte forma faço uma consulta onde pego só a registro do nome depois dentro do do {} eu faço outra consulta que busca os telefones associados ao nome encontrado na primeira consulta. Funciona só que nesse caso eu tenho que fazer 2 consultas sendo que uma será realizado no meio do codigo o que eu n sei se é uma boa pratica outra questão é que vou precisar de outros campos como emails endereços e etc. E seguindo esse método vou precisar fazer uma consulta para cada um. Gostaria de saber se há um caminho melhor para atingir esse resultado. Desde ja agradeço. Acredito que esteja no lugar certo ja que as operações são feitas no php mas caso esse topico deva estar na area de mysql pesso a um moderador que mude. Compartilhar este post Link para o post Compartilhar em outros sites
Wagner Martins - SC 0 Denunciar post Postado Fevereiro 8, 2013 Neste caso eu primeiro buscaria as categorias em uma consulta, e na segunda consulta buscaria os produtos comparando a categoria do produto com a categoria da primeira consulta. Compartilhar este post Link para o post Compartilhar em outros sites
Alex.89 6 Denunciar post Postado Fevereiro 8, 2013 Ae, sei que é uma gambiara kkk, mas foi o que me veio em mente hehehhe $sql = "SELECT * FROM TabNomes ORDER BY nome"; $res = mysql_query($sql); while($nomes = mysql_fetch_object($res)) { // ID do nome, vamos utilizar ele para fazer a consulta // na tabela onde armazena os números de telefones $nome_id = $nomes->id; $sql = "SELECT * FROM TabTel WHERE nome_id = $nome_id"; $res = mysql_query($sql); $select = array(); while ($linha = mysql_fetch_assoc($res)) { array_push ($select, $linha); } echo "<li>Nome: " . $nomes->nome .; for($i=0; $i<count($select); $i++) { echo "Tel:" . $select[$i]['telefone']; } echo "</li>"; } Só para avisar, não testei Compartilhar este post Link para o post Compartilhar em outros sites
Samuel Gomes_148425 19 Denunciar post Postado Fevereiro 8, 2013 Essa é uma dúvida que eu tenho também. Normalmente eu faço como o Alex.89 postou Compartilhar este post Link para o post Compartilhar em outros sites
Joel F 6 Denunciar post Postado Fevereiro 8, 2013 Obrigado alex pela resposta, a solução que eu encontrei é semelhante a sua. Vou deixar o tópico aberto por mais um tempo, caso alguem tenha uma resposta diferente dessa que nois utilizamos. Compartilhar este post Link para o post Compartilhar em outros sites