تم تصميم استعلام SQL هذا لـ Data Explorer لاستخراج وحساب الروابط من المشاركات في المواضيع العامة ضمن نطاق تاريخ محدد. كما يسمح بالبحث الاختياري عن الروابط بناءً على نمط عنوان URL محدد.
يمكن أن يكون هذا الاستعلام مفيدًا في السيناريوهات التي يكون فيها فهم استخدام الروابط الداخلية أو الخارجية في المناقشات العامة أمرًا مهمًا.
--[params]
--date :start_date = 2023-12-01
--date :end_date = 2024-01-01
--text :link_pattern = %example.com%
--boolean :search = false
SELECT
p.created_at,
p.id AS post_id,
p.topic_id AS topic_id,
COUNT(DISTINCT links) AS link_count,
array_agg(DISTINCT links) AS all_links
FROM
posts p
JOIN
topics t ON p.topic_id = t.id
CROSS JOIN LATERAL
regexp_matches(p.cooked, 'href="((?:http|https)://[^"]+)"', 'g') AS links
WHERE
p.created_at >= :start_date
AND p.created_at <= :end_date
AND p.cooked ~ 'href="http[s]?://'
AND t.archetype <> 'private_message' -- استبعاد الرسائل الخاصة
AND (:search = false OR links[1] LIKE :link_pattern) -- تصفية الروابط حسب النمط
GROUP BY
p.id,
p.topic_id,
p.post_number
ORDER BY
p.created_at ASC
شرح استعلام SQL
يقوم الاستعلام بالعمليات التالية:
- عمليات الربط: يربط جدول
postsبجدولtopicsلضمان النظر فقط في المشاركات التي تنتمي إلى مواضيع عامة. يتم ذلك عن طريق التحقق من أنarchetypeللموضوع ليس ‘private_message’. - مطابقة الأنماط: يستخدم تعبيرًا عاديًا لاستخراج جميع عناوين URL من حقل
cookedلكل مشاركة. يحتوي هذا الحقل على النسخة المعروضة بصيغة HTML لمحتوى المشاركة. - التصفية:
- تصفية التاريخ: يتم تضمين المشاركات التي تم إنشاؤها ضمن النطاق الزمني المحدد من قبل المستخدم (
start_dateإلىend_date) فقط. - تصفية الروابط: اختياريًا، إذا تم تعيين المعلمة
searchإلى true، يتم النظر فقط في الروابط التي تطابقlink_pattern.
- تصفية التاريخ: يتم تضمين المشاركات التي تم إنشاؤها ضمن النطاق الزمني المحدد من قبل المستخدم (
- التجميع: لكل مشاركة، يقوم الاستعلام بعد الروابط المميزة وتجميعها في مصفوفة. يساعد هذا في فهم تنوع الروابط المشتركة في مشاركة واحدة.
- الإخراج: يخرج الاستعلام تاريخ إنشاء المشاركة، ومعرف المشاركة، ومعرف الموضوع، وعدد الروابط الفريدة، ومصفوفة لهذه الروابط.
المعلمات
start_dateوend_date: يحددان النطاق الزمني للمشاركات المراد تحليلها.link_pattern: نمط لتصفية الروابط. سيتم تضمين الروابط التي تحتوي على هذا النمط فقط إذا تم تعيينsearchإلى true. في المعلمة:link_pattern، الرموز%هي أحرف بدل في SQL تطابق صفرًا أو أكثر من الأحرف.search: علامة منطقية لتفعيل تصفية نمط الرابط.
النتائج
created_at: تاريخ ووقت إنشاء المشاركة.post_id: المعرف الفريد للمشاركة.topic_id: المعرف الفريد للموضوع الذي تنتمي إليه المشاركة.link_count: عدد الروابط الفريدة الموجودة في المشاركة. يشير هذا إلى عدد الروابط الخارجية المختلفة التي تم تضمينها في المشاركة.all_links: مصفوفة بجميع الروابط الفريدة الموجودة في المشاركة.
نتائج مثال
| created_at | post_id | topic_id | link_count | all_links |
|---|---|---|---|---|
| 2023-12-05 14:30:00 | 10234 | 543 | 2 | {“http://example.com/page1”, “http://example.com/page2”} |
| 2023-12-12 09:15:00 | 10567 | 550 | 1 | {“http://example.com/page3”} |
| 2023-12-20 16:45:00 | 10894 | 560 | 3 | {“http://example.com/page1”, “http://example.com/info”, “http://example.com/contact”} |
| … | … | … | … | … |