Jump to content
Omar~

Dúvida sobre PDO::FETCH_OBJ 2 tabelas o mesmo resultado

Recommended Posts

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.

Share this post


Link to post
Share on other sites

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.

 

  • +1 1

Share this post


Link to post
Share on other sites
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";

 

Share this post


Link to post
Share on other sites

Indiferente do exemplo, a solução apresentada pelo @wootzor é a que irá resolver o seu problema. Indiferente se utilizar FETCH_ASSOC ou FETCH_OBJ.

Share this post


Link to post
Share on other sites

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}";

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.