أود إنشاء تقرير قائم على SQL يمكنه توفير فهم لنوع الأشياء التي ينشر عنها المستخدمون لدينا.
الفئات والمواضيع والعلامات - هذه هي الحقول التي حددتها والتي ستوفر لي ذلك، وسيكون عدد المشاركات هو المقياس (أعتقد، أرغب أساسًا في استخدام هذا لفهم الشعبية)
هل هناك أي حقول أخرى يمكن أن تدعم هذا؟ هل يوجد استعلام موجود يمكنني استخدامه حيث أفترض أن الآخرين قد طلبوا ذلك؟
لست متأكدًا من أنني أستطيع تصور ما تفكر فيه لتضمين الفئات والعلامات والمواضيع، مع عدد المنشورات لكل منها، في نفس التقرير/الاستعلام.
أعتقد أنه يمكنك القيام بذلك في قسمين - أحدهما للفئات والآخر للعلامات، مع عدد المواضيع الجديدة والمنشورات الجديدة خلال فترة زمنية معينة لكل منها. ربما حتى تضمين عدد المستخدمين الذين ينشرون؟
في الأساس، أريد مخرجات للفئات/العلامات/المواضيع في مخرج واحد لهذه الأسباب:
تحديد التكرارات - الموضوع، على حد فهمي، هو الكلمة المستخدمة لبدء محادثة/موضوع. يمكن للمستخدم إضافة موضوع مشابه في فئتين مختلفتين، سيكون من الجيد فهم ذلك لفهم سلوك المستخدم/تعديل الفئات المحتمل لجعلها أوضح.
فهم أنواع المواضيع التي نحصل عليها لكل فئة - يمكن أن تكون الفئة شيئًا مثل “السيارات” ولكن بشكل طبيعي يمكن أن تستوعب الكثير من أنواع المواضيع المختلفة، وأرغب في رؤية ما يتحدث عنه المستخدمون حقًا.
العلامات - في الحالة التي لدينا، يمكنني رؤية أنه تم استخدام العلامات كنوع من التداخل بين فئات مختلفة، لذلك سيكون من الجيد فهم المنشورات من هذا المنظور أيضًا.
في الأساس، مما يمكنني استنتاجه، أحتاج إلى ربط الفئات والعلامات والمواضيع معًا باستخدام SQL وربما المنشورات وأتساءل عما إذا كان قد تم القيام بذلك بالفعل لعرض الكود/هل هناك نوع من مكتبة الأكواد/الاستعلامات؟
|الفئة|الموضوع|الوسم|المشاركات|المستخدمون|
| — | — | — | — |—|\n|سيارات|أحب السيارات|عجلات|44|1\n|سيارات|أكره السيارات|عجلات|32|3\n|سيارات|أكره السيارات|أبواب|39|4\n|سيارات|كيف تعمل السيارات؟|أبواب|32|1\n|كيف تعمل الأشياء|كيف تعمل السيارات؟|كيفية القيام بذلك|32|3\n\nهذا مثال على الرؤية. سيسمح هذا بمزيد من التحليل لفهم أشياء مثل “ما هي النسبة المئوية للمستخدمين الذين ينشرون في فئة السيارات ويتحدثون عن العجلات”\n\nأتفهم أنه سيكون في مستكشف البيانات الذي يجمع بين المشاركات والمواضيع والوسوم والفئات، وربما جدول آخر - لقد نشرت للتو هنا لفهم ما إذا كان قد تم القيام بذلك بالفعل / أين توجد استعلامات SQL التي تم إنشاؤها سابقًا (ليس على حسابنا، أعني بشكل عام)\n\nآمل أن يكون هذا منطقيًا، لقد بدأت التحقيق بالأمس فقط
آه، فهمت الآن. أنت تريد قائمة مواضيع بتفاصيل إضافية بدلاً من نظرة عامة موجزة. أعتقد أن هذا ممكن.
أعتقد أن الشيء الوحيد الغريب هو أن الموضوع يمكن أن يحتوي على علامات متعددة، ولكن دعنا نجهز شيئًا ونرى إلى أين نصل.
ولكن لتصفح الاستعلامات الموجودة الأخرى، هناك تلك المتاحة بشكل قياسي من لوحة التحكم الخاصة بك (يمكنك رؤية إصدارات SQL هنا مجمعة تحت dashboard-sql)، بالإضافة إلى بعض التقارير القياسية المجمعة مع مستكشف البيانات، وهناك مجموعة كبيرة من التقارير المخصصة هنا على meta مجمعة تحت علامة sql-query.
-- [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
هل من الممكن تعديل الكود للاحتفاظ باسم الفئة واسم الموضوع؟ لا أعرف ما إذا كان “اسم المنشور” شيئًا أم أنه اسم الموضوع بالفعل؟
لقد حاولت تعديل الكود بنفسي ولكني لا أفهم طريقة عمل الجداول معًا بما يكفي حاليًا حيث نتج عن ذلك 0 نتائج بدلاً من نفس حجم السجلات ولكن بكلمات وليس معرفات.
لا توجد مشكلة. عند العرض في مستكشف البيانات، يتم تحويل 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