كيف يمكنني معرفة عدد المستخدمين الذين لديهم كل إعداد بريد إلكتروني؟
أسأل لأن ما يقرب من عُشر المستخدمين الذين يتابعون موضوعًا معينًا فقط هم من يتلقون إشعارات المنشورات عبر البريد الإلكتروني.
شكرًا لك.
كيف يمكنني معرفة عدد المستخدمين الذين لديهم كل إعداد بريد إلكتروني؟
أسأل لأن ما يقرب من عُشر المستخدمين الذين يتابعون موضوعًا معينًا فقط هم من يتلقون إشعارات المنشورات عبر البريد الإلكتروني.
شكرًا لك.
هل تقصد تلك الموجودة في صفحة التفضيلات/البريد الإلكتروني الخاصة بهم؟ يوجد هذا الحقل في جدول 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