2011-02-28 161 views
2

正在苦苦尋找這個MySQL查詢。當我拿出WHERE子句時,所有結果都會顯示給用戶。所以這不是問題的PHP輸出。我很確定它在WHERE子句中,但我一直被卡住了很長時間,無法解決。MySQL Query - SELECT DISTINCT ...(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"); 

感謝您的幫助!

回答

3

您不應在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 
+0

非常感謝,你已經解決了我的問題! – Jimmy 2011-02-28 20:22:19

1

我已經清理了參加陳述和刪除不必要的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 
+0

這個解決方案也適用,但是,我使用了Joe's,因爲它與我網站的其他部分保持一致。感謝您的輸入! – Jimmy 2011-02-28 20:31:45

+0

當然可以!歡迎來到SO。 – Sonny 2011-02-28 21:25:05