Ir para conteúdo

POWERED BY:

Arquivado

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

crazy4combat

[Resolvido] O PHP não retorna valor de duas tabelas (INNER JOIN)

Recommended Posts

João batista, funcionou! Obrigadão!

Mas não entendi porque numa consulta de relacionamento eu não posso dar simplesmente um echo $linha['nome_aluno'].' estuda no '.$linha['nome_escola'].'<br />';, pois para recuperar dados de só uma tabela uso esse procedimento.

 

Outra coisa, como você fez para chamar o resultado com %s. O que significa?

Compartilhar este post


Link para o post
Compartilhar em outros sites

A solução do João matou a pau, embora eu não goste muito de printf() :lol:

 

Só faltou ele apontar aonde estava o erro, assim quando tiver outro problema semelhante, o crazy4combat pesca o própri peixe ao invés de comprá-lo limpo, temperado e assado http://forum.imasters.com.br/public/style_emoticons/default/assobiando.gif

 

Sobre sua dúvida com <pre> é que, não sei porque motivo ridículo, a função print_r(), quando usada, retorna a estrutura de um array completinha, porém, SEM considerar as novas linhas, espaços e tabulações.

 

Quando mencionei para usar print_r() entre tags <pre></pre> quis dizero mesmo que o matias disse nesse post, só que colocando a tag de abertura antes do print_r() enão antes do while() (mas não faz diferença nenhuma :P )

 

[EDIT]

 

Enquanto estilizava a resposta, houve outro post.

 

Eu acredito, crazy4combate que o problema não tenha sido "não poder" e sim a "forma como" você estava fazendo.

 

Reveja seu resultado de print_r(). Posso estar enganado mas usar aquela sintaxe de ponto não é o correto.

 

Mesmo que você tenha usado um ponto na construção do seu SQL, o que foi retornado eram os nomes dos campos como você definiu na estrutura, sem pontos.

 

Certinho?

Compartilhar este post


Link para o post
Compartilhar em outros sites

João batista, funcionou! Obrigadão!

 

;)

 

Mas não entendi porque numa consulta de relacionamento eu não posso dar simplesmente um echo $linha['nome_aluno'].' estuda no '.$linha['nome_escola'].'<br />';, pois para recuperar dados de só uma tabela uso esse procedimento.

 

É claro que você pode, é exatamente nesse ponto que está o erro pequenininho que eu disse, olha só:

 

select
   t1.coluna,
   t2.coluna
from
   tabela t1
join
   tabela t2
on
   t1.qqrcoisa = t2.qqrcoisa

 

Preste atenção que, por utilizarmos duas tabelas onde os nomes dos campos são exatamente os mesmos tivemos que dar apelidos para as tabelas, no caso acima foram dados os apelidos: t1 e t2

Nos últimos posts o código que estava sendo testado era:

$bd_linha['a.nome'].' estuda no '.$bd_linha['e.nome'].'<br />';

Repare no dump que você deu na sua matriz:

[id_alunos] => 1
             [1] => Luciano
             [nome] => Consolata
             [2] => 1
             [id_escola] => 1
             [3] => 1
             [4] => Consolata

Percebe que você só tem uma coluna nome e no lugar onde deveria ter o outro nome tem apenas um [3], isso é devido a ambiguidade causada pelas colunas com mesmo nome.

A solução para o problema não está de fato no meu código PHP e sim na minha string SQL:

 

select
   e.nome 'escola',
   a.nome 'aluno'
from
   `escola` e
join
   `alunos` a
on
   a.id_escola = e.id_escola
order by
   escola;

 

Preste atenção logo abaixo do select que eu dei um apelido 'escola' para a coluna nome da tabela escola e um apelido 'aluno' para a coluna nome da tabela alunos. Ou seja, o erro está na parte SQL e não no PHP.

 

Outra coisa, como você fez para chamar o resultado com %s. O que significa?

 

Assim como o C, o PHP possui a função printf, com ela é possível utilizar alguns modificadores e conseguir um resultado mais legível:

 

%s significa string: printf( "Essa é a minha %s" , "string" ); //Essa é a minha string

%d significa inteiro: printf( "Hoje é %d do %d de %d" , 2 , 8 , 2009 ); //Hoje é 2 do 8 de 2009

%f significa números em ponto flutuante: printf( "PI vale %f" , pi() ); //PI vale 3.141593

 

E você ainda pode modificar a saída:

 

printf( "Hoje é %02d do %02d de %04d" , 2 , 8 , 2009 ); //Hoje é 02 do 08 de 2009

 

Ou então:

 

printf( "PI vale %.2f" , pi() ); //PI vale 3.14

Compartilhar este post


Link para o post
Compartilhar em outros sites

$row possui o valor do registro atualdo laço.

 

$row é um array, daí o uso das chaves. O que você estava fazendo era acessar um índice que não existia em $row.

 

Foi como eu disse, não é porque usou o ponto na sua query SQL que o resultado na matriz terá o mesmo ponto.

 

Você sempre tem que acessar aquilo que foi interpretadopelo PHP a partir do retorno do SQL e não ocontrário, partindo primeiro do SQL.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu estudei o código inclusive as funções que eu não sabia, mas como eu faço para que o output seja de colunas específica como alunos.nome, ou seja não quero que ele dê o output do vetor inteiro só da coluna que eu quero e sem modificar select e.nome 'escola', a.nome 'aluno'.

 

Quando há só uma tabela é só usar echo($vetor['coluna']);, mas em vetor bidimencional não funciona. Como faço?

 

Ou melhor qual é o motivo do vetor bidimencional ser diferente?

Compartilhar este post


Link para o post
Compartilhar em outros sites

DESCARTEM A MINHA MENSAGEM ANTERIOR CONSEGUI ENTENDER O LANCE DOS VETORES!

 

Valew a todos!

Eu tenho maIs uma dúvida, aproveitando o tópico em questão do INNER JOIN, LEFT JOIN e RIGHT JOIM sem brincaderira os melhores sites que achei foram:

Manual do Mysql

http://phpbrasil.com/artigo/GMMFPCeqQatm/2/php-e-mysql--joins-em-2-tabelas-ou-mais

http://www.tizag.com/mysqlTutorial/mysqlleftjoin.php

 

Outros sites dizem a mesma coisa LEFT JOINNER seleciona a tabela da esquerda e RIGHT JOINNER a da direita. E daí? Na prática fica dificíl. Como a tabela antes do left é principal??? Pq?

 

Não estou conseguindo entender, para mim left, right e inner parece igual. Alguém com pacioência para me explicar usando barras de chocolate (rs....) igual ao primário.

 

Abs,

mais uma vez muito obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

crazy4combat

 

Esta sua dúvida é de Mysql. Entre no fórum específico aqui. Caso não encontre o que precisa, pode postar a dúvida lá mesmo.

 

Não vou mover seu tópico para lá, pois a dúvida deste tópico já foi resolvida.

 

Carlos Eduardo

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.