إذا كان لدى منتداك المكون الإضافي Data Explorer Plugin مثبتًا، فيمكنك كتابة استعلامات SQL لجلب هذه المعلومات من قاعدة بيانات Discourse. يحاول هذا الاستعلام جلب المعرف والعنوان للمواضيع، ومعرف المستخدم لآخر مشاركة في الموضوع. يقوم فقط بتحديد المواضيع حيث تم إجراء آخر مشاركة بواسطة مستخدم في مجموعة “clients”.
هذا مجرد مثال.
SELECT
t.id AS topic_id,
t.title AS topic_title,
(SELECT user_id FROM posts WHERE topic_id = t.id ORDER BY created_at DESC LIMIT 1) AS last_post_user_id
FROM
topics t
JOIN
posts p ON p.topic_id = t.id
JOIN
group_users gu ON gu.user_id = p.user_id
JOIN
groups g ON g.id = gu.group_id
WHERE
g.name = 'clients'
GROUP BY
t.id
HAVING
MAX(p.user_id) = last_post_user_id
ORDER BY
MAX(p.created_at) DESC
لا تقلق. أعتقد أن النسخة المعدلة تعمل. للملاحظة فقط، قد يكون من المفيد أيضًا إضافة بعض الأشياء الإضافية لتصفية المواضيع/المشاركات المحذوفة، والرسائل الخاصة، والمناقشات/منشورات الإجراءات الصغيرة أيضًا. شيء مثل:
SELECT
t.id AS topic_id,
t.title AS topic_title,
(SELECT user_id FROM posts WHERE topic_id = t.id ORDER BY created_at DESC LIMIT 1) AS last_post_user_id
FROM topics t
JOIN posts p ON p.topic_id = t.id
JOIN group_users gu ON gu.user_id = p.user_id
JOIN groups g ON g.id = gu.group_id
WHERE g.name = 'clients'
AND t.deleted_at ISNULL
AND p.deleted_at ISNULL
AND p.post_type = 1
AND t.archetype = 'regular'
GROUP BY t.id
HAVING MAX(p.user_id) = last_post_user_id
ORDER BY MAX(p.created_at) DESC
على الرغم من أنني لا أعتقد أن هذا سيلتقط أي موضوع قام فيه منشئ الموضوع بالرد مرة أخرى (على سبيل المثال، ليقول ‘شكرًا’ وما إلى ذلك)، لذلك قد يحتاج إلى طريقة مختلفة اعتمادًا على ما تبحث عنه @kenjdarhan. هل ستكون مواضيع تم إنشاؤها بواسطة العملاء تحديدًا والتي تلقت ردًا من عضو في الفريق ولم يتم حلها؟ شيء من هذا القبيل؟
إنها ببساطة الموضوعات التي تم فيها إنشاء أحدث رد بواسطة مستخدم من مجموعة المستخدمين “العميل”.
إذا تم الرد على موضوع بواسطة مستخدم غير عميل (أي أحد زملائي)، فلن أحتاج إلى التركيز على هذا الموضوع لأن الزميل الذي رد سيواصل حل المشكلة في الموضوع إذا لم يتم حل المشكلة.
يبدو أنك بحاجة إلى شيء مختلف قليلاً. كل منتدى مختلف قليلاً، لذا قد تحتاج الحلول إلى التكيف، ولكنني سأصف هذه الموجز بـ “المواضيع التي أنشأها المستخدمون في مجموعة ‘العميل’، دون رد من مستخدم في مجموعة ‘الفريق’”. إذا كان هذا هو الحال، فيمكنك تكييف هذا الاستعلام باستخدام group_ids الصحيحة ويجب أن يفعل ما تريده:
-- [params]
-- date :start_date = 01/01/2023
-- date :end_date = 01/06/2023
WITH team_replies AS (
SELECT topic_id
FROM posts
WHERE user_id IN (SELECT user_id FROM group_users WHERE group_id = 3) --group_id of your 'team' group
AND post_number <> 1
AND deleted_at ISNULL
AND post_type = 1
GROUP BY topic_id
)
SELECT t.created_at::date,
t.id AS topic_id,
MIN(p.id) AS first_post_id
FROM topics t
JOIN posts p ON p.topic_id = t.id
WHERE t.user_id IN (SELECT user_id FROM group_users WHERE group_id = 45) -- group_id of your 'client' group
AND t.id NOT IN (SELECT topic_id FROM team_replies)
AND t.created_at BETWEEN :start_date AND :end_date
AND t.deleted_at ISNULL
AND t.archetype = 'regular'
GROUP BY t.id
ORDER BY 1 ASC
هذا يعمل بسلاسة أكبر إذا كنت تعرف group_ids بدلاً من استخدام أسماء المجموعات. يمكنك العثور عليها في JSON الخاص بالمجموعة (على سبيل المثال، /g/admins.json)، على الرغم من أنه يمكنك أيضًا استخدام شيء مثل هذا كبحث سريع:
-- [params]
-- string :group_name
SELECT name,
id
FROM groups
WHERE name LIKE LOWER (:group_name)
وستحتاج أيضًا إلى تحديث الصفحة في المرة الأولى التي تنسخ فيها الاستعلامات إلى مستكشف البيانات الخاص بك لالتقاط مربعات إدخال المعلمات.