Ir para conteúdo

POWERED BY:

Arquivado

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

aletres

inner join avançado

Recommended Posts

Boa tarde.

 

Por exemplo:

 

TABELA JOGOS

Id

Nome

Descrição

Id_console

 

TABELA CONSOLE

Id

Nome

 

TABELA NOTÍCIAS

Id

Titulo

Texto

Id_jogo

 

Quando a pessoa quer ver NOTÍCIAS DO PS3, como faço para ele listar as NOTÍCIAS do CONSOLE X que é do JOGO X ???

 

Sei fazer o JOIN simples, mas neste caso tenho dificuldades. Alguém pode me ajudar?

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenho o seguinte código, que hoje, consegui fazer funcionar:

 

SELECT game_cad_n.*,game_cad_j.*,game_console.*

 

FROM game_cad_j

 

INNER JOIN game_cad_n

ON game_cad_j.cad_j_id = game_cad_n.cad_n_cad_j_id

 

INNER JOIN game_console

ON game_cad_j.cad_j_id = game_console.console_id

No caso que citei no outro Post, eu precisava consultar o banco da seguinte maneira:

 

NOTÍCIAS -> JOGO -> CONSOLE

 

Se o console da notícia for x, aparece na lista de jogos.

 

O SELECT acima está correto ou há uma maneira mais correta de fazer? Pois acho que a consulta concentrou da seguinte maneira: NOTÍCIAS -> JOGO <- CONSOLE

 

Se um dia eu precisar consultar 4 tabelas de uma vez, não tenho idéia de como fazer.

 

 

Obrigado pela ajuda Wagner.

 

Um abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Imagine tabelas como se fossem conjuntos e os campos PK e FK sãp as ligações entre elas e algum elemento entre os conjuntos é comum, como ter COD_PRODUTO numa tabela de ITENS_DA_NOTA.

 

Dado os conjuntos A, B, C, D, E, F, G, H, I e J, una-os com INNER, LEFT ou RIGHT JOIN:

 

GRUPO A

id

nome

 

GRUPO B

id

 

GRUPO C

id

 

GRUPO D

id

 

GRUPO E

id

 

GRUPO F

id

 

GRUPO G

id

 

GRUPO H

id

 

GRUPO I

id

 

GRUPO J

id

 

 

SELECT A.nome
FROM A INNER JOIN B (ON A.id = B.id)
            INNER JOIN C (ON A.id = C.id)
...

 

só isso!! Abração!! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois é, o código não funcionou perfeitamente.Não consigo imprimir na tela o Id ou Nome do console, ele está pegando o Id do jogo (mas a lista em sí, está ok).

$resultadoN = mysql_query('SELECT game_cad_n.*,game_cad_j.*,game_console.* FROM game_cad_j INNER JOIN game_cad_n ON game_cad_j.cad_j_id = game_cad_n.cad_n_cad_j_id INNER JOIN game_console ON game_cad_j.cad_j_id = game_console.console_id WHERE cad_n_ativo = "s" AND cad_j_console LIKE "%,'.$pagina_console.',%" ORDER BY cad_n_data DESC LIMIT 0,15 ');if (preg_match(",".$console_id.",", $cad_j_console )) { echo('checked'); }if(!$resultadoN){ die("Erro na solicitação de query: " . mysql_error() . '<br>');}if(mysql_num_rows($resultadoN) == 0){ echo("<tr><td><font color=red>Não há notícias até o momento.</font></td></tr>");} else { while($row = mysql_fetch_array($resultadoN)){ $cad_n_id = $row['cad_n_id']; $cad_n_titulo = $row['cad_n_titulo']; $cad_n_data = $row['cad_n_data']; $console_nome = $row['console_nome']; }}

O que será que está faltando???Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ele pega o nº do jogo e exibe

 

Nome do jogo - World in Conflict promete ser o melhor game de 2007

 

em vez de

 

Nome do console - World in Conflict promete ser o melhor game de 2007

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ao invés de fazer:

 

SELECT game_cad_n.*,game_cad_j.*,game_console.*

Cite os campos das tabelas que você irá precisar no lugar do '*'.

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.