Ir para conteúdo

Arquivado

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

Joel F

Como exibir dados de um bd mysql porvenientes de tabelas relacionadas?

Recommended Posts

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

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

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

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

×

Informação importante

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