0

我目前正在使用下面的这个脚本。

$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");

Stats 表仅包含 1 条记录。

现在,我的问题是它上面的查询正在回显所有记录上的数据,而不仅仅是一个。

我的问题是......我在添加的行上做错了什么:

LEFT JOIN statsas table3 on table1.venue_id = table3.venue_id ?

4

4 回答 4

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

是我的解决方案

于 2013-08-13T15:44:18.503 回答
1

如果您只想包含 table1 中在 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 联接

于 2013-08-13T15:41:04.213 回答
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");
于 2013-08-13T15:37:50.977 回答
0

您可以使用 anINNER JOIN而不是LEFT JOIN. 请参阅此SO 帖子以明确说明或此博客文章

于 2013-08-13T15:53:36.507 回答