Следующий запрос прекрасно работает в моем php-скрипте, но когда я запускаю его в phpMyAdmin (для той же базы данных), я не получаю никаких результатов (даже «0 результатов» - он просто обновляет страницу).
SELECT comment, username, image, post_date, ((us.user_id != 22) AND
((SELECT read_date FROM
bookmarks WHERE
product_id=456029 AND
user_id=22) < post_date)) AS
new_comment FROM
comments AS
co, users AS
us, flair WHERE co.product_id=456029 AND
co.user_id=us.user_id AND
flair_id=us.active_flair_id ORDER BY
co.post_date ASC
Я заметил, что если вынуть псевдонимы, запрос работает в phpMyAdmin
SELECT comment, username, image, post_date, ((users.user_id != 22) AND
((SELECT read_date FROM
bookmarks WHERE
product_id=456029 AND
user_id=22) < post_date)) AS
new_comment FROM
comments, users, flair WHERE comments.product_id=456029 AND
comments.user_id=users.user_id AND
flair_id=users.active_flair_id ORDER BY
comments.post_date ASC
Мне любопытно, почему это произошло. (работает phpMyAdmin - 2.11.9.5)
РЕДАКТИРОВАТЬ: переформулировка Ричарда ниже работает в phpMyAdmin. Так что теперь загадка заключается в том, почему одна формулировка работает, а другая - нет (когда они обе работают нормально при выполнении в php-скрипте).
окончательная форма запроса после совета Ричарда об удалении подзапроса:
SELECT c.comment AS
COMMENT , username, image, DATE_FORMAT( c.post_date, '%b %D, %Y' ) AS post_date, IF( (
(
b.read_date IS NULL
)
OR (
b.read_date < c.post_date
) ) , IF( c.user_id !=1, 1, 0 ) , 0
) AS new_comment
FROM comments c
INNER JOIN users u ON c.user_id = u.user_id
INNER JOIN flair f ON flair_id = u.active_flair_id
LEFT JOIN bookmarks b ON ( b.product_id = c.product_id
AND b.user_id =1 )
WHERE c.product_id =538968
ORDER BY c.post_date ASC