我目前正在使用以下脚本。
$query = mysql_query("SELECT * FROM `venues` as table1
LEFT JOIN `follows` as table2 on table1.venue_id = table2.venue_id
WHERE table2.user_id = $userid");
表格包含以下字段:
表1:
id,venue_id,user_id ...
表2:
id,venue_id,user_id ...
上面的查询返回5条记录。
现在...
我需要在上面的脚本Table3中添加第三个表
表3字段还包含id,venue_id,user_id ......但我不知道脚本的WHERE中的内容。
我尝试在上面的脚本中添加LEFT JOIN以添加第三个表格,如下所示:
$query = mysql_query("SELECT * FROM `venues` as table1
LEFT JOIN `follows` as table2 on table1.venue_id = table2.venue_id
LEFT JOIN `stats` as table3 on table1.venue_id = table3.venue_id
WHERE table2.user_id = $userid");
统计表仅包含1条记录。
现在,我的问题是它上面的查询回显了所有记录的数据,而不仅仅是那个记录。
我的问题是......我在我添加的行上做错了什么:
LEFT JOIN stats
as table3 on table1.venue_id = table3.venue_id?
答案 0 :(得分:2)
好的,我想你也想加入user_id。所以
SELECT
*
FROM
`venues` AS table1
LEFT JOIN `follows` AS table2 USING (venue_id)
LEFT JOIN `stats` AS table3 USING (venue_id, user_id)
WHERE
table2.user_id = $userid
是我的解决方案
答案 1 :(得分:1)
如果您只想在table3中包含table3中包含非空记录的记录,那么您需要使用INNER JOIN而不是LEFT JOIN。请参阅JOIN
的MySQL文档$query = mysql_query("SELECT * FROM `venues` as table1 LEFT JOIN `follows` as table2 on table1.venue_id = table2.venue_id INNER JOIN `stats` as table3 on table1.venue_id = table3.venue_id WHERE table2.user_id = $userid");
不需要明确地使用“INNER”。默认情况下,连接是INNER连接
答案 2 :(得分:0)
你根本不限制记录。请改用:
$query = mysql_query("SELECT * FROM `venues` as table1
LEFT JOIN `follows` as table2 on table1.venue_id = table2.venue_id
LEFT JOIN `stats` as table3 on table1.venue_id = table3.venue_id
WHERE table2.user_id = $userid AND table3.venue_id IS NOT NULL");
答案 3 :(得分:0)
您可以使用INNER JOIN
而不是LEFT JOIN
。请参阅此SO
post以明确或blog article