【问题标题】:PHP SQL output issue adding a third table to a query将第三个表添加到查询中的 PHP SQL 输出问题
【发布时间】:2013-08-13 23:53:36
【问题描述】:

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

$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 stats as table3 on table1.venue_id = table3.venue_id ?

【问题讨论】:

    标签: php sql


    【解决方案1】:

    好的,我想你也想加入 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
    

    是我的解决方案

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我试过这个,但它只返回 1 条记录,即记录。我需要它来显示 5 条记录,但只显示包含要回显的统计数据的行。
      • 好的。那么你的问题是不完整的。听起来您的查询返回了正确的数据,并且您的 PHP 脚本没有跳过那些您不需要打印的数据。能否添加回显数据的 PHP 代码?
      【解决方案3】:

      您根本没有限制记录。改用这个:

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

      【讨论】:

      • 刚刚尝试添加 AND table3.venue_id IS NOT NULL 但它仍然给我相同的结果。
      【解决方案4】:

      您可以使用INNER JOIN 而不是LEFT JOIN。请参阅此SOpost 以说明清楚或此blog article

      【讨论】:

        猜你喜欢
        • 2022-10-04
        • 2011-04-04
        • 1970-01-01
        • 2022-07-07
        • 2010-11-08
        • 2015-10-22
        • 1970-01-01
        • 2018-06-01
        • 1970-01-01
        相关资源
        最近更新 更多