Diese Data Explorer SQL-Abfrage wurde entwickelt, um Links aus Beiträgen in öffentlichen Themen über einen bestimmten Zeitraum zu extrahieren und zu zählen. Sie ermöglicht auch die optionale Suche nach Links basierend auf einem angegebenen URL-Muster.
Diese Abfrage kann in Szenarien hilfreich sein, in denen das Verständnis der Nutzung interner oder externer Links in öffentlichen Diskussionen wichtig ist.
--[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' -- Private Nachrichten ausschließen
AND (:search = false OR links[1] LIKE :link_pattern) -- Links nach Muster filtern
GROUP BY
p.id,
p.topic_id,
p.post_number
ORDER BY
p.created_at ASC
Erklärung der SQL-Abfrage
Die Abfrage führt die folgenden Operationen durch:
- Join-Operationen: Sie verbindet die
posts-Tabelle mit dertopics-Tabelle, um sicherzustellen, dass nur Beiträge aus öffentlichen Themen berücksichtigt werden. Dies geschieht durch die Prüfung, ob diearchetypedes Themas nicht ‘private_message’ ist. - Mustererkennung: Sie verwendet einen regulären Ausdruck, um alle URLs aus dem
cooked-Feld jedes Beitrags zu extrahieren. Dieses Feld enthält die HTML-gerenderte Version des Beitragsinhalts. - Filterung:
- Datumsfilterung: Es werden nur Beiträge einbezogen, die innerhalb des vom Benutzer angegebenen Datumsbereichs (
start_datebisend_date) erstellt wurden. - Linkfilterung: Optional, wenn der Parameter
searchauf true gesetzt ist, werden nur Links berücksichtigt, die demlink_patternentsprechen.
- Datumsfilterung: Es werden nur Beiträge einbezogen, die innerhalb des vom Benutzer angegebenen Datumsbereichs (
- Aggregation: Für jeden Beitrag zählt die Abfrage die eindeutigen Links und aggregiert sie in einem Array. Dies hilft, die Vielfalt der in einem einzelnen Beitrag geteilten Links zu verstehen.
- Ausgabe: Die Abfrage gibt das Erstellungsdatum des Beitrags, die Beitrags-ID, die Themen-ID, die Anzahl der eindeutigen Links und ein Array dieser Links aus.
Parameter
start_dateundend_date: Definieren den Datumsbereich für die zu analysierenden Beiträge.link_pattern: Ein Muster zum Filtern der Links. Nur Links, die dieses Muster enthalten, werden berücksichtigt, wennsearchauf true gesetzt ist. Im Parameter:link_patternsind die%-Symbole Platzhalter in SQL, die null oder mehr Zeichen entsprechen.search: Ein boolesches Flag, um die Filterung nach Linkmuster zu aktivieren.
Ergebnisse
created_at: Das Datum und die Uhrzeit, zu der der Beitrag erstellt wurde.post_id: Die eindeutige Kennung des Beitrags.topic_id: Die eindeutige Kennung des Themas, zu dem der Beitrag gehört.link_count: Die Anzahl der im Beitrag gefundenen eindeutigen Links. Dies gibt an, wie viele verschiedene externe Links im Beitrag enthalten waren.all_links: Ein Array aller im Beitrag gefundenen eindeutigen Links.
Beispielergebnisse
| 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”} |
| … | … | … | … | … |