MySQL Query - SELECT DISTINCT ... (WHERE) проблема - PullRequest
2 голосов
/ 28 февраля 2011

Борьба с этим запросом 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");

Спасибо за вашу помощь!

Ответы [ 2 ]

3 голосов
/ 28 февраля 2011

Вы не должны ссылаться на столбцы из таблицы LEFT JOINed (например, b.userID) в предложении WHERE. Когда вы это делаете, вы неявно превращаете свое СОЕДИНЕНИЕ в ВНУТРЕННЕЕ СОЕДИНЕНИЕ. Вместо этого сделайте эти тесты частью условия 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
1 голос
/ 28 февраля 2011

Я очистил операторы объединения и удалил ненужный 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...