2013-02-04 3 views
-2

J'ai 5 tableaux comme celui-ci:requête SQL choisir parmi de nombreuses tables

  • TABLEAU 1: PRIMARY_KEY, NOM, FK_TABLE2
  • TABLEAU 2: PRIMARY_KEY, FK_TABLE3
  • TABLEAU 3: PRIMARY_KEY, FK_TABLE4
  • TABLEAU 4: PRIMARY_KEY, FK_TABLE5
  • TABLEAU 5: PRIMARY_KEY, DIAGRAM_NAME

Et ce que je veux est quand je recherche un nom dans une barre de recherche, il retourne Name de Table1, et aussi DIAGRAM_NAME de table 5. La première partie est facile:

SELECT `TABLE1`.name 
from Table 1 
Where `TABLE1`.name LIKE '%$search%' 

Mais pour la deuxième partie, je besoin de votre aide ... Merci!

Répondre

0

Vous devez regarder dans JOIN:

SELECT T.Name, T5.Diagram_Name 
FROM Table1 T 
    JOIN Table2 T2 ON T.FK_TABLE2 = T2.PRIMARY_KEY 
    JOIN Table3 T3 ON T2.FK_TABLE3 = T3.PRIMARY_KEY 
    JOIN Table4 T4 ON T3.FK_TABLE4 = T4.PRIMARY_KEY 
    JOIN Table5 T5 ON T4.FK_TABLE5 = T5.PRIMARY_KEY 
WHERE T.Name LIKE '%$search%' 

Si vous souhaitez renvoyer les noms qui ne sont pas les noms de diagramme correspondant, utilisez LEFT JOIN à la place.

Bonne chance.

+0

vous avez probablement voulu dire 'T5.Diagram_Name' – paul

+0

bonne capture @paul - J'ai édité ma réponse! – sgeddes

0

Vous allez devoir JOIN les tables à l'aide des Primary Key et FK valeurs:

select t1.name, t5.DIAGRAM_NAME 
from table1 t1 
left join table2 t2 
    on t1.FK_TABLE2 = t2.PRIMARY_KEY 
left join table3 t3 
    on t2.FK_TABLE2 = t3.PRIMARY_KEY 
left join table4 t4 
    on t3.FK_TABLE3 = t4.PRIMARY_KEY 
left join table5 t5 
    on t4.FK_TABLE4 = t5.PRIMARY_KEY  
Where t1.name LIKE '%$search%'  

Si vous avez besoin d'aide pour apprendre JOIN syntaxe, voici un grand visual explanation of joins.

J'ai utilisé un LEFT JOIN dans mon exemple requête, qui renverra toutes les lignes de table1 même s'il n'y a pas une ligne correspondante dans les autres tableaux. Si vous savez qu'il existe une ligne correspondante dans toutes les tables que vous rejoignez, vous pouvez utiliser un INNER JOIN.