فهم ما ينشره مستخدمونا

أود إنشاء تقرير قائم على SQL يمكنه توفير فهم لنوع الأشياء التي ينشر عنها المستخدمون لدينا.

الفئات والمواضيع والعلامات - هذه هي الحقول التي حددتها والتي ستوفر لي ذلك، وسيكون عدد المشاركات هو المقياس (أعتقد، أرغب أساسًا في استخدام هذا لفهم الشعبية)

هل هناك أي حقول أخرى يمكن أن تدعم هذا؟ هل يوجد استعلام موجود يمكنني استخدامه حيث أفترض أن الآخرين قد طلبوا ذلك؟

إعجابَين (2)

ليس استعلام SQL، ولكن افترض أنك لاحظت ذلك:

/categories يمنحك عددًا من المواضيع الجديدة/شهريًا لكل فئة، وهو ما يمكن أن يكون مفيدًا جدًا.

/tags يمنحك عدد المواضيع حسب العلامة

فقط في حال لم تكن على علم (ولكن ربما كنت!)

إعجاب واحد (1)

لست متأكدًا مما تشير إليه هنا.

هل هذه هي التقارير الموجودة في الجزء الإداري للمجتمع؟

لقد رأيت هذا ولكني أريد أساسًا أن تكون كلها في مكان واحد - حتى تتمكن من رؤية عدد الموضوعات أو العلامات التي تحتوي عليها الفئة وما إلى ذلك.

إنها مسارات URL.

لست متأكدًا من أنني أستطيع تصور ما تفكر فيه لتضمين الفئات والعلامات والمواضيع، مع عدد المنشورات لكل منها، في نفس التقرير/الاستعلام.

أعتقد أنه يمكنك القيام بذلك في قسمين - أحدهما للفئات والآخر للعلامات، مع عدد المواضيع الجديدة والمنشورات الجديدة خلال فترة زمنية معينة لكل منها. ربما حتى تضمين عدد المستخدمين الذين ينشرون؟

لذلك سيعطي شيئًا كهذا كجدول النتائج:

الفئة المواضيع الجديدة المنشورات الجديدة المستخدمون
الفئة أ 9 15 4
الفئة ب 56 167 32
إعجابَين (2)

حسنًا، لقد أدخلت الفئات - Discourse Meta كما أفترض أن هذا ما قصدته.

في الأساس، أريد مخرجات للفئات/العلامات/المواضيع في مخرج واحد لهذه الأسباب:

  • تحديد التكرارات - الموضوع، على حد فهمي، هو الكلمة المستخدمة لبدء محادثة/موضوع. يمكن للمستخدم إضافة موضوع مشابه في فئتين مختلفتين، سيكون من الجيد فهم ذلك لفهم سلوك المستخدم/تعديل الفئات المحتمل لجعلها أوضح.
  • فهم أنواع المواضيع التي نحصل عليها لكل فئة - يمكن أن تكون الفئة شيئًا مثل “السيارات” ولكن بشكل طبيعي يمكن أن تستوعب الكثير من أنواع المواضيع المختلفة، وأرغب في رؤية ما يتحدث عنه المستخدمون حقًا.
  • العلامات - في الحالة التي لدينا، يمكنني رؤية أنه تم استخدام العلامات كنوع من التداخل بين فئات مختلفة، لذلك سيكون من الجيد فهم المنشورات من هذا المنظور أيضًا.

في الأساس، مما يمكنني استنتاجه، أحتاج إلى ربط الفئات والعلامات والمواضيع معًا باستخدام SQL وربما المنشورات وأتساءل عما إذا كان قد تم القيام بذلك بالفعل لعرض الكود/هل هناك نوع من مكتبة الأكواد/الاستعلامات؟

|الفئة|الموضوع|الوسم|المشاركات|المستخدمون|
| — | — | — | — |—|\n|سيارات|أحب السيارات|عجلات|44|1\n|سيارات|أكره السيارات|عجلات|32|3\n|سيارات|أكره السيارات|أبواب|39|4\n|سيارات|كيف تعمل السيارات؟|أبواب|32|1\n|كيف تعمل الأشياء|كيف تعمل السيارات؟|كيفية القيام بذلك|32|3\n\nهذا مثال على الرؤية. سيسمح هذا بمزيد من التحليل لفهم أشياء مثل “ما هي النسبة المئوية للمستخدمين الذين ينشرون في فئة السيارات ويتحدثون عن العجلات”\n\nأتفهم أنه سيكون في مستكشف البيانات الذي يجمع بين المشاركات والمواضيع والوسوم والفئات، وربما جدول آخر - لقد نشرت للتو هنا لفهم ما إذا كان قد تم القيام بذلك بالفعل / أين توجد استعلامات SQL التي تم إنشاؤها سابقًا (ليس على حسابنا، أعني بشكل عام)\n\nآمل أن يكون هذا منطقيًا، لقد بدأت التحقيق بالأمس فقط

آه، فهمت الآن. أنت تريد قائمة مواضيع بتفاصيل إضافية بدلاً من نظرة عامة موجزة. أعتقد أن هذا ممكن. :+1:

أعتقد أن الشيء الوحيد الغريب هو أن الموضوع يمكن أن يحتوي على علامات متعددة، ولكن دعنا نجهز شيئًا ونرى إلى أين نصل. :slight_smile:

ولكن لتصفح الاستعلامات الموجودة الأخرى، هناك تلك المتاحة بشكل قياسي من لوحة التحكم الخاصة بك (يمكنك رؤية إصدارات SQL هنا مجمعة تحت dashboard-sql)، بالإضافة إلى بعض التقارير القياسية المجمعة مع مستكشف البيانات، وهناك مجموعة كبيرة من التقارير المخصصة هنا على meta مجمعة تحت علامة sql-query.


@SStrong - ربما شيء على هذا المنوال:

-- [params]
-- date :start_date = 2024-01-01
-- date :end_date = 2024-12-31


WITH tag_names AS (

    SELECT
        t.id AS topic_id,
        string_agg(tags.name, ', ' ORDER BY tags.name) AS "tags"
    FROM topics t
      JOIN topic_tags tt ON tt.topic_id = t.id
      JOIN tags ON tags.id = tt.tag_id
    WHERE t.created_at BETWEEN :start_date AND :end_date
    GROUP BY t.id
    ),

user_count AS (

    SELECT
        p.topic_id,
        COUNT(DISTINCT p.user_id) AS users
    FROM posts p
      JOIN topics t ON t.id = p.topic_id
    WHERE t.created_at BETWEEN :start_date AND :end_date
      AND t.deleted_at IS NULL
      AND p.deleted_at IS NULL
      AND t.archetype = 'regular'
      AND p.post_type = 1
      AND p.user_id > 0
    GROUP BY p.topic_id

)

SELECT
    t.category_id,
    t.id AS topic_id,
    tn.tags,
    t.posts_count,
    uc.users
FROM topics t
  JOIN tag_names tn ON tn.topic_id = t.id
  JOIN user_count uc ON uc.topic_id = t.id
WHERE t.created_at BETWEEN :start_date AND :end_date
  AND t.archetype = 'regular'
  AND t.deleted_at IS NULL
ORDER BY t.category_id, t.title
إعجابَين (2)

اعتذر، اعتقدت أنني قد رددت على هذا بالفعل.

هل من الممكن تعديل الكود للاحتفاظ باسم الفئة واسم الموضوع؟ لا أعرف ما إذا كان “اسم المنشور” شيئًا أم أنه اسم الموضوع بالفعل؟

لقد حاولت تعديل الكود بنفسي ولكني لا أفهم طريقة عمل الجداول معًا بما يكفي حاليًا حيث نتج عن ذلك 0 نتائج بدلاً من نفس حجم السجلات ولكن بكلمات وليس معرفات.

لا توجد مشكلة. :slight_smile: عند العرض في مستكشف البيانات، يتم تحويل category_id و topic_id (والعديد من الحقول الأخرى) تلقائيًا إلى روابط قابلة للاستخدام داخل الموقع، ولكن عند التصدير للتحليل في مكان آخر، يمكنك استخدام أسماء الفئات وعناوين المواضيع بدلاً من ذلك:

-- [params]
-- date :start_date = 2024-01-01
-- date :end_date = 2024-12-31


WITH tag_names AS (

    SELECT
        t.id AS topic_id,
        string_agg(tags.name, ', ' ORDER BY tags.name) AS "tags"
    FROM topics t
      JOIN topic_tags tt ON tt.topic_id = t.id
      JOIN tags ON tags.id = tt.tag_id
    WHERE t.created_at BETWEEN :start_date AND :end_date
    GROUP BY t.id
    ),

user_count AS (

    SELECT
        p.topic_id,
        COUNT(DISTINCT p.user_id) AS users
    FROM posts p
      JOIN topics t ON t.id = p.topic_id
    WHERE t.created_at BETWEEN :start_date AND :end_date
      AND t.deleted_at IS NULL
      AND p.deleted_at IS NULL
      AND t.archetype = 'regular'
      AND p.post_type = 1
      AND p.user_id > 0
    GROUP BY p.topic_id

)

SELECT
    c.name AS category_name,
    t.title,
    tn.tags,
    t.posts_count,
    uc.users
FROM topics t
  JOIN tag_names tn ON tn.topic_id = t.id
  JOIN user_count uc ON uc.topic_id = t.id
  JOIN categories c ON c.id = t.category_id
WHERE t.created_at BETWEEN :start_date AND :end_date
  AND t.archetype = 'regular'
  AND t.deleted_at IS NULL
ORDER BY t.category_id, t.title
إعجاب واحد (1)