Как я могу узнать, сколько пользователей имеет каждую настройку электронной почты?
Я спрашиваю, потому что только около десятой части пользователей, следящих за темой, получают уведомления о новых сообщениях по электронной почте.
Спасибо.
Как я могу узнать, сколько пользователей имеет каждую настройку электронной почты?
Я спрашиваю, потому что только около десятой части пользователей, следящих за темой, получают уведомления о новых сообщениях по электронной почте.
Спасибо.
Те, что на странице Настройки/Электронная почта? Это поле находится в таблице user_options (email_level), а также есть аналогичное поле для личных сообщений (email_messages_level).
Думаю, этот запрос работает. Он извлекает пользователей, следящих за конкретной темой, и группирует их по уровню уведомлений по электронной почте:
| Ключ | Уровень уведомлений по почте |
|---|---|
| 0 | Всегда |
| 1 | Только когда я вдали от компьютера |
| 2 | Никогда |
-- [params]
-- int :topic_id
SELECT tu.topic_id AS topic_id,
uo.email_level,
COUNT(*)
FROM user_options uo
JOIN topic_users tu ON tu.user_id = uo.user_id
WHERE tu.notification_level = 3
AND tu.topic_id = :topic_id
GROUP BY topic_id, uo.email_level
Дайте знать, если я что-то напутал. ![]()
![]()
Обновление:
Думаю, этот вариант тоже работает (и выводит данные чуть аккуратнее):
-- [params]
-- int :topic_id
SELECT tu.topic_id AS topic_id,
COUNT(CASE WHEN tu.notification_level = 3 THEN 1 END) AS watching,
COUNT(CASE WHEN uo.email_level = 0 THEN 1 END) AS always,
COUNT(CASE WHEN uo.email_level = 1 THEN 1 END) AS only_when_away,
COUNT(CASE WHEN uo.email_level = 2 THEN 1 END) AS never
FROM user_options uo
INNER JOIN topic_users tu ON tu.user_id = uo.user_id
WHERE tu.notification_level = 3
AND tu.topic_id = :topic_id
GROUP BY topic_id