Jump to content
xploit

INNER JOIN mais que 3 tabelas?

Recommended Posts

xploit

Boas eu quero saber como faço para aceder a mais de 3 4 ou 20 tabelas com o INNER JOIN, porque neste momento estou a fazer isto:

 SQLConnect();

$CallSQL = mysql_query("
SELECT p.product_id , d.full_description, d.product FROM  cscart_products AS p

INNER JOIN cscart_products_categories AS c ON c.product_id = p.product_id

INNER JOIN cscart_product_descriptions AS d ON d.product_id = p.product_id

WHERE c.category_id=$GET_cat AND p.status='A' AND d.lang_code='PT' $GET_sort $GET_n_produtos");
$n=0;
while($row = mysql_fetch_array($CallSQL)) {


$CallSQL_2 = mysql_query("
SELECT tbl_images.image_path FROM cscart_images AS tbl_images

INNER JOIN cscart_images_links AS tbl_links ON tbl_links.object_id = ".$row["product_id"]."

WHERE tbl_images.image_id=tbl_links.image_id AND tbl_links.object_type='product' ORDER BY tbl_links.pair_id ASC");	

}

E eu queria evitar este While que estou a fazer, porque o parametro de busca da tabela "cscart_images" é o "product_id" que está na tabela inicial "cscart_products", deve haver uma maneira de misturar tudo isto para fazer só uma consulta, digo eu.

Obrigado desde já pelas ajudas

Share this post


Link to post
Share on other sites
xploit

Sim claro que funciona mas estou a fazer 2 consultas enquanto puderia estar a fazer apenas uma... os parametros/variáveis que estão na primeira linha SQL como $GET_sort ou $GET_n_produtos são linhas extra como LIMIT X, ou o sort que significa nada ou RAND() no sql, mas eu cria fazer toda esta consulta em apenas uma chamada a base de dados.

Share this post


Link to post
Share on other sites
ric.almeida

Exprimenta utilizar assim

Select tabela1.id, tabela2.id, tabela3.id, tabela4.id
From tabela1 inner join (
            tabela2 inner join (
                     Tabela3 inner join tabela4 on tabela3.ID = tabela4.ID_tabela3)
            on tabela2.id = tabela3.ID_tabela2)
   on tabela1.ID=Tabela2.ID_Tabela1

Share this post


Link to post
Share on other sites
M6

Podes adicionar tantos joins quantos os necessários.

Deves ter em atenção a performance de execução da query (antes sequer de pensar em índices) porque a mesma poderá ter de ser reescrita de outra forma para ser mais rápida.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
xploit

Exprimenta utilizar assim

Select tabela1.id, tabela2.id, tabela3.id, tabela4.id
From tabela1 inner join (
            tabela2 inner join (
                     Tabela3 inner join tabela4 on tabela3.ID = tabela4.ID_tabela3)
            on tabela2.id = tabela3.ID_tabela2)
   on tabela1.ID=Tabela2.ID_Tabela1

Muito Obrigado pela ajuda ric.almeida resolveu o meu problema não sabia fazer vários joins assim dava me sempre erro porque não usava as "(" ")".

Sim vou analisar bem isto M6 e fazer uns testes de perfomance a base de dados também não é muito muito grande mas vou analisar, obrigado a todos :)

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

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.