Omar~ 87 Denunciar post Postado Julho 4, 2017 Bom tenho uma dúvida sobre isso, digamos que eu vá fazer a leitura de 2 tabelas ao mesmo tempo com LEFT JOIN, RIGHT JOIN ou INNER JOIN tanto faz. Digamos que seja 1 tabela marido a outra esposa. Então tenho a coluna "nome" em ambas tabelas para armazenar o nome do marido e da esposa. Então se eu fazer a query recebo os dados em array e faço um forech e pegar o resultado de cada nome. Citar foreach ($array as $value) { echo $value->nome; } Como faço para separar no nome de cada 1, como eu faria para distinguir numa exibição os nomes? Exemplo: Citar foreach ($array as $value) { echo "O Marido é: {$value->nome}"; echo "E a Esposa dele é: {$value->nome}"; } Porque até então só consigo fazer com PDO::FETCH_NUM relacionando o número com o índice dos dados na array. Compartilhar este post Link para o post Compartilhar em outros sites
wootzor 103 Denunciar post Postado Julho 4, 2017 Antes de mais, acho que é pertinente rever a estrutura de tabelas pois essas entidades (marido e mulher) não fazem muito sentido. Dito isto, qual a estrutura das tabelas? Hipoteticamente, pode ser feito algo do tipo: SELECT marido.nome AS Marido, esposa.nome AS Esposa FROM marido INNER JOIN esposa ON marido.PK = esposa.FK; E usar o método PDO::FETCH_ASSOC para aceder aos campos respectivos. Compartilhar este post Link para o post Compartilhar em outros sites
Omar~ 87 Denunciar post Postado Julho 4, 2017 4 horas atrás, wootzor disse: Antes de mais, acho que é pertinente rever a estrutura de tabelas pois essas entidades (marido e mulher) não fazem muito sentido. Dito isto, qual a estrutura das tabelas? Hipoteticamente, pode ser feito algo do tipo: SELECT marido.nome AS Marido, esposa.nome AS Esposa FROM marido INNER JOIN esposa ON marido.PK = esposa.FK; E usar o método PDO::FETCH_ASSOC para aceder aos campos respectivos. Falei só como exemplo no nome de tabelas para chegar onde queria, que é ter uma tabela X com índice Y, e outra tabela W com índice também Y. Porque como fazer a busca é simples, o problema é distinguir na array multidimensional os mesmos índices. Vou tentar explicar novamente. Na tabela X eu tenho o Dono com uma coluna nome que é para armazenar o nome do proprietário, sei lá de um carro por ser... Lembrando que é um exemplo.... Na tabela W eu tenho uma coluna nome, que é para armazenar a marca do carro. Mais expecífico ficaria uma query assim (Sem usar prepare pois é só um exemplo!) Citar SELECT `dono`.`nome`, `dono`.`compras`, `dono`.`carro_id`, `carro`.`nome`, `carro`.`marca`, `carro`.`carro_id` FROM `dono`, `carro` LEFT JOIN `login` ON `login`.`id_propietario` = `carro`.`id_propietario` WHERE `dono`.`carro_id` = `carro`.`carro_id` AND `dono`.`comprado` > '1' ORDER BY `dono`.`compras` DESC, `carro`.`marca` DESC LIMIT 0, 100 Note que tenho a tabela dono que é para armazenar os dados do dono do carro, e a tabela carro que é para armazenar os dados dos carros, e chego ao ao nome do proprietário relação pelo "id_propietario" que está na 3º tabela login por exemplo. Ou seja se eu usar FETCH_OBJ para chegar o nome, vou somente ter o resultado do nome ao qual coloquei primeiro na ordem de busca na query, se se eu usar FETCH_ASSOC (Coisa que não gosto) também vai dar no mesmo. Obs.: Não usaria tabelas assim, e se chegasse até mim um sistema desorientado desse sugeria a modificação. Mas pode ser que um cliente me venha com um banco de dados mal construído assim e não queira que ele seja modificado. No mais com FETCH_NUM vai tranquilo: Seria mais ou menos assim: Citar echo $resultado[0]; // Aqui mostra o `dono`.`nome`, echo $resultado[3]; // Aqui mostra o `carro`.`nome`, O objetivo é ter um resultado como esse: echo "O dono do carro é: {$resultado[0]}, ele comprou o carro: {$resultado[3]}, de marca {$resultado[4]}, esse propietário já comprou {$resultado[1]} carros"; Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Heming 766 Denunciar post Postado Julho 4, 2017 Indiferente do exemplo, a solução apresentada pelo @wootzor é a que irá resolver o seu problema. Indiferente se utilizar FETCH_ASSOC ou FETCH_OBJ. Compartilhar este post Link para o post Compartilhar em outros sites
Omar~ 87 Denunciar post Postado Julho 5, 2017 Aqui a solução: (Resolvido) A ordem de acesso ao índice stdClass será pela ordem da busca na query. Foi só usar a lógica do FETCH_NUM Assim sendo pode-se acessar o valor específico portanto que seja na ordem que esteja na array. <?php $arr = (object) [ $a = ['Nome' => 'Luiza', 'Idade' => '10'], $b = ['Nome' => 'Miau', 'Animal' => 'Gato'] ]; echo "<pre>"; var_dump($arr); echo "</pre>"; foreach ($arr as $value) { extract($value); } echo "A menina {$Nome} tem {$Idade} anos de Idade, e seu animal de estimação é um {$Animal} que se chama {$Nome}"; Compartilhar este post Link para o post Compartilhar em outros sites