@entermix

Почему не работает SQL запрос?

Нужно выбрать количество комментариев к заказу с id 286, которые непрочитаны пользователем с id 1, пробую сл. запрос:

SELECT COUNT(  `o`.`id` ) AS count
FROM  `orders`  `o` 
WHERE  `o`.`id` =286
AND ( EXISTS (

SELECT * 
FROM  `order_comments`  `oc` 
WHERE  `oc`.`order_id` =  `o`.`id` 
) AND NOT 
EXISTS (

SELECT * 
FROM  `order_comment_views`  `ocv` 
WHERE  `ocv`.`comment_id` =  `oc`.`id` 
AND  `ocv`.`user_id` =1
)
)

но он выполняется с ошибкой: "#1054 - Unknown column 'oc.id' in 'where clause'". Почему так?

Пробую так:

SELECT COUNT(  `o`.`id` ) AS count
FROM  `orders`  `o` 
WHERE  `o`.`id` =286
AND (

EXISTS (

SELECT * 
FROM  `order_comments`  `oc` 
WHERE  `oc`.`order_id` =  `o`.`id` 
AND NOT 
EXISTS (

SELECT * 
FROM  `order_comment_views`  `ocv` 
WHERE  `ocv`.`comment_id` =  `oc`.`id` 
AND  `ocv`.`user_id` =1
)
)
)


но результат неверный..

P.S. Решил проблему так:

SELECT COUNT(`oc`.`id`) AS count
FROM `orders` `o`, `order_comments` `oc`
WHERE `o`.`id` =286 AND `o`.`id`= `oc`.`order_id` AND NOT EXISTS (SELECT * FROM `order_comment_views` `ocv` WHERE `ocv`.`comment_id` = `oc`.`id` AND `ocv`.`user_id` = 1)
  • Вопрос задан
  • 2301 просмотр
Пригласить эксперта
Ответы на вопрос 1
@Sumor
По мне, так лучше всё объединить, а потом подсчитать. Примерно так (возможны синтаксические ошибки):
SELECT COUNT(*) AS count
FROM orders o 
JOIN order_comments oc ON o.id = oc.order_id
JOIN order_comment_views ocv ON ocv.comment_id = oc.id
WHERE o.id =286 AND ocv.user_id =1
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы