PHP SQL输出问题向查询添加第三个表

时间:2013-08-13 15:34:37

标签: php sql

我目前正在使用以下脚本。

$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?

4 个答案:

答案 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