MySQL根据其他表值从表中选择

时间:2014-10-10 16:21:47

标签: php mysql select

我很抱歉打扰,但我需要你的专业人士的帮助......

我有两张桌子:

Table1:
ID, date, menu1, menu2, menu3, menu4

Table2:
ID, name, somethingElse, somethingElse2

在表1中(menu1,menu2,menu3,menu4)是Table2的ID。我需要的是向数据库查询“date”值并从Table2获取四行(取决于Table1的menuX值)有什么建议吗?

2 个答案:

答案 0 :(得分:1)

阅读MySQL-docs并查看关于JOINing的MySQL教程。你会发现这样的事情:

使用SELECT做一个简单的JOIN并告诉MySQL使用ID作为join-colum:

SELECT Table1.`date` FROM Table1 
JOIN Table2 ON Table1.ID = Table2.ID
WHERE Table1.menu1 = "someValue"
AND Table1.menu2 = "someOtherValue"

如果运行速度有点慢,请尝试在其中一个表上添加INDEX id-col:

ALTER TABLE Table1 ADD INDEX myIndex (ID)

您可以通过声明

来检查检查的行数
EXPLAIN SELECT Table1.`date` FROM Table1 ...

答案 1 :(得分:0)

好的,现在我理解你的问题。感谢您提供的示例,这是一个可以解决您的问题的查询。这里的诀窍是使用UNION将一个查询结果附加到另一个查询结果下。这样做四次就可以了:

SELECT b.* FROM dailymenu as a JOIN menu as b ON a.menu1 = b.ID WHERE a.`date` = '2014-10-08'
UNION
SELECT b.* FROM dailymenu as a JOIN menu as b ON a.menu2 = b.ID WHERE a.`date` = '2014-10-08'
UNION
SELECT b.* FROM dailymenu as a JOIN menu as b ON a.menu3 = b.ID WHERE a.`date` = '2014-10-08'
UNION
SELECT b.* FROM dailymenu as a JOIN menu as b ON a.menu4 = b.ID WHERE a.`date` = '2014-10-08'

你的菜单听起来很美味: - )