【问题标题】:MySQL Query - SELECT DISTINCT... (WHERE) issueMySQL 查询 - SELECT DISTINCT ... (WHERE) 问题
【发布时间】:2011-02-28 20:01:11
【问题描述】:

正在努力处理这个 MySQL 查询。当我取出 WHERE 子句时,所有结果都会显示给用户。所以问题不是 php 输出。我很确定它在 WHERE 子句中,但我已经被困了很长时间,无法解决。

$test = $db->query
("SELECT DISTINCT(a.id), a.name 
FROM test AS a LEFT JOIN(testusers AS b,testclasses AS c, userclasses AS d)
ON (c.classID = d.classID AND a.id = b.testID)
WHERE d.userID='" . $_SESSION["id"] . "' OR b.userID= '" . $_SESSION["id"] . "' 
GROUP BY a.id");

感谢您的帮助!

【问题讨论】:

    标签: mysql phpmyadmin


    【解决方案1】:

    您不应在 WHERE 子句中引用 LEFT JOINed 表中的列(例如,b.userID)。当你这样做时,你隐式地将你的 JOIN 变成了一个 INNER JOIN。让这些测试成为 JOIN 条件的一部分。

    不要这样做:

    /* Wrong */
    SELECT *
        FROM test a
            LEFT JOIN test2users b
                ON a.id = b.testid
        WHERE b.userID = 123
    

    改为这样做:

    /* Right */
    SELECT *
        FROM test a
            LEFT JOIN test2users b
                ON a.id = b.testid
                    AND b.userID = 123
    

    【讨论】:

      【解决方案2】:

      我已经清理了连接语句并删除了不必要的 DISTINCT()。这给了你什么?

      SELECT a.id, a.name 
      FROM " . $config["table_prefix"] . "test AS a
      LEFT JOIN " . $config["table_prefix"] . "test2users AS b
          ON a.id = b.testID
          AND b.userID= '" . $_SESSION["id"] . "' 
      LEFT JOIN " . $config["table_prefix"] . "test2classes AS c
      LEFT JOIN " . $config["table_prefix"] . "test2classes AS d
          ON c.classID = d.classID
          AND d.userID='" . $_SESSION["id"] . "'
      GROUP BY a.id
      

      【讨论】:

      • 这个解决方案也有效,但是,我使用了 Joe 的解决方案,因为它与我网站的其他部分一致。不过感谢您的意见!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-06
      • 2013-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-30
      相关资源
      最近更新 更多