Я использую SELECT
запрос в качестве подзапроса в Query, приведенном ниже...
SELECT COUNT ('Notification'.'id') AS 'count'
FROM 'listaren_mercury_live'.'notifications' AS 'Notification'
WHERE NOT FIND_IN_SET('Notification'.'id',(SELECT read_ids FROM read_notifications WHERE user_id = 46))
AND((notisfication_for IN("all","India"))
OR(FIND_IN_SET(46,notification_for))
Этот запрос отлично работает, когда
SELECT read_ids FROM read_notifications WHERE user_id = userid)
результат возврата, равный 21,22,23,24
но когда этот запрос возвращает пустой.
Результат id 0
вместо 3
. Есть 3 непрочитанных уведомления для пользователя; поэтому результат должен быть 3
проблема
Запрос дает правильный результат при возврате запроса внутреннего выбора
12,42
но если запрос возвращает null, то весь результат запроса будет равен 0.
Ожидаемый результат с запросом
Результат Я получаю
Я просто хочу, если подзапрос возвращает пустое значение. Затем запрос (Notification.id, (SELECT read_ids FROM read_notifications WHERE user_id) = 46) выглядит так:
('Notification'.'id',(0))
вместо
('Notification'.'id',())
Так он будет работать должным образом
Скажите, пожалуйста, какое улучшение мне нужно в этом.
Спасибо
Попробуйте заменить
FIND_IN_SET('Notification'.'id',(SELECT read_ids FROM read_notifications WHERE user_id = 46))
с
FIND_IN_SET('Notification'.'id',IFNULL((SELECT read_ids FROM read_notifications WHERE user_id = 46), ''))
Из руководства, если результат подзапроса пуст, он вернет NULL, а FIND_IN_SET вернет NULL, если любой аргумент равен NULL, а NOT NULL по-прежнему NULL, как и NULL AND 1, а NULL эквивалентен false. Поэтому, когда подзапрос возвращает NULL, ваше условие WHERE не будет выполнено.
Добавив IFNULL в результат подзапроса, вы можете получить его, чтобы вернуть значение, которое действительно для FIND_IN_SET, что позволит вашему запросу работать должным образом.