我有一个noob问题,但对我来说是一个麻烦的问题。我在三个表上使用SELECT,其中一个是realtional(持有关系 - 用户ID与Place的ID),第一个是用户表,最后一个地方。我写了这个完美的问题
$query = "SELECT users.Username,usrxplc.User,places.Name
FROM users,usrxplc,places
WHERE usrxplc.Place=places.ID AND usrxplc.User=users.ID"
吐出与所有用户关联的所有地方。很好,但我想将它仅限于某个用户。看似简单,但我被卡住了。
答案 0 :(得分:4)
您使用WHERE
子句过滤结果,因此只需为users.ID
添加一个子句:
select users.Username,
usrxplc.User,
places.name
from users,
usrxplc,
places
where usrxplc.Place = places.ID
and usrxplc.User = users.ID
and users.ID = 123
答案 1 :(得分:2)
只觉得需要发布备选方案 - 而不是选择和所有表格,您可以使用INNER JOIN将一个表格连接到另一个表格
SELECT
users.Username,
places.Name
FROM users
INNER JOIN usrxplc ON usrxplc.User=users.ID
INNER JOIN places ON places.ID = usrxplc.Place
WHERE users.ID = 111
它在功能上与其他答案相同,但是当您进入更复杂的查询和表时,您会发现使用JOIN可以进行更大程度的优化,因为您可以进一步限制每个JOIN获得的行,例如以下也是有效的,其中User行在加入其他表之前是有限的
SELECT
users.Username,
places.Name
FROM places
INNER JOIN usrxplc ON usrxplc.Place = places.ID
INNER JOIN users ON users.ID = usrxplc.User AND users.ID = 111
在更复杂的查询中,或者如果这些表格要大得多,这通常会提供更优化的查询