Моя таблица sql имеет следующую структуру:
id, sender, recipient, content, date_sent, last_activity, sender_read, recipient read
Это для личных сообщений. sender
- это идентификатор пользователя, который отправил сообщение. Когда он получает ответ, sender_read
становится 1
и тот же отправляется recipient
. Мне нужно подсчитать общее количество непрочитанных сообщений, которые пользователь имеет. Я попробовал что-то вроде этого:
SELECT COUNT(CASE WHEN recipient = ? AND recipient_read = 0 THEN 1 END) as unread FROM pm
UNION SELECT COUNT(CASE WHEN sender = ? AND sender_read = 0 THEN 1 END) as unread FROM pm
Но, похоже, это не работает. В основном мне нужно объединить два счета и вернуть один псевдоним. Как я могу это сделать?
Просто объедините два условия в одно выражение:
SELECT COUNT(CASE WHEN recipient = ? AND recipient_read = 0 THEN 1
WHEN sender = ? AND sender_read = 0 THEN 1
ELSE null
END) as unread FROM pm
WHERE recipient = ? OR sender = ?