-2

我有 5 个这样的表:

  • 表 1: PRIMARY_KEY,NAME,FK_TABLE2
  • 表 2: PRIMARY_KEY、FK_TABLE3
  • 表 3: PRIMARY_KEY、FK_TABLE4
  • 表 4: PRIMARY_KEY、FK_TABLE5
  • 表 5: PRIMARY_KEY、DIAGRAM_NAME

而我想要的是,当我在搜索栏中搜索名称时,它会Name从中返回Table1,也DIAGRAM_NAME从中返回table 5。第一部分很简单:

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

但对于第二部分,我需要你的帮助......谢谢!

4

2 回答 2

0

您需要考虑使用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%'

如果要返回没有匹配图表名称的名称,请LEFT JOIN改用。

祝你好运。

于 2013-02-04T14:36:51.113 回答
0

您将需要JOIN使用Primary KeyFK值的表:

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%'      

如果您在学习JOIN语法方面需要帮助,这里有一个很好的 joins 可视化解释

我在示例查询中使用了 a ,即使其余表中没有匹配的行LEFT JOIN,它也会返回所有行。table1

如果您知道要加入的所有表中都有匹配的行,那么您可以使用INNER JOIN.

于 2013-02-04T14:39:14.393 回答