Wikipedia Diskussion:Archiv/Datenbankabfragen/IP-Diskussionen

Diese Abfrage galt für die MediaWiki-Version 1.4, ab Version 1.5 gibt es statt cur die Tabelle page, die allerdings das Datum der letzten Änderung nicht enthält. Dieses muss aus dem Artikeltext-Dump gewonnen werden. (Bei wikisign.org wird der Dump in eine cur-Tabelle im 1.4-Format umgewandelt, so dass die Abfrage dort funktionieren müsste - wenn schreibende Abfragen erlaubt wären.)

Zunächst erzeugen wir eine Liste derjenigen Benutzerdiskussionsseiten, die keine zugehörige Benutzerseite haben. (Wählt man statt der Namensräume 2 und 3 die Namensräume 0 und 1, erhält man alle Artikeldiskussionen ohne Artikel, ich glaube, irgendwo eine Abfrage zu diesem Thema schon gesehen zu haben.)

 --alle Benutzerseiten
 drop table if exists ns2;
 create table ns2(
  ns2_id int(8) unsigned not null,
  ns2_title varchar(255) binary not null,
  primary key (ns2_id),
  key title (ns2_title)
 );
 insert into ns2
 select cur_id, cur_title
 from cur
 where cur_namespace = 2;
 
 --alle Benutzerdiskussionsseiten
 drop table if exists ns3;
 create table ns3(
  ns3_id int(8) unsigned not null,
  ns3_title varchar(255) binary not null,
  primary key (ns3_id),
  key title (ns3_title)
 );
 insert into ns3
 select cur_id, cur_title
 from cur
 where cur_namespace = 3;
 
 --alle Benutzerdiskussionsseiten ohne zugehörige Benutzerseite,
 --eine direkte Abfrage wäre auch möglich, so wie hier ist sie aber deutlich schneller
 drop table if exists diskussionswaise;
 create table diskussionswaise(
  w_id int(8) unsigned not null,
  primary key(w_id)
 );
 insert into diskussionswaise
 select ns3_id
 from ns3 left join ns2 on (ns3_title = ns2_title)
 where ns2_title is null;

Nun kommt die eigentliche Abfrage: Bestimme alle IP-Diskussionsseiten. Hierfür wird die obige Abfrage noch nicht benötigt.

--alle IP-Diskussionsseiten
 drop table if exists ipdiskussion;
 create table ipdiskussion(
  cur_id int(8) unsigned not null,
  cur_title varchar(255) binary not null,
  cur_date varchar(8) binary not null,
  primary key (cur_id)
 );
 insert into ipdiskussion
 select cur_id, cur_title, substring(cur_timestamp,1,8)
 from cur
 where cur_namespace = 3
 and cur_title regexp '^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}$';

Zuletzt lassen wir uns endlich die Liste ausgeben, mit der Zusatzinformation über das Vorhandensein der Benutzerseiten.

select concat(
  '*[[Benutzer Diskussion:',
  cur_title,
  '|]], ',
  cur_date,
  if (w_id IS NOT NULL,
   '',
   concat(' - [[Benutzer:',cur_title,'|(B)]]')
  )
 )
 from ipdiskussion
 left join diskussionswaise on (cur_id = w_id)
 order by cur_date asc, cur_title asc
 limit 100;

Wenn man die Information über die Benutzerseiten weglässt, kommt man gänzlich mit folgender Abfrage aus:

select concat(
  '*[[Benutzer Diskussion:',
  cur_title,
  '|]], ',
  substring(cur_timestamp,1,8)
 )
 from cur
 where cur_namespace = 3
 and cur_title regexp '^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}$'
 order by cur_timestamp asc, cur_title asc
 limit 100;

Kommentare

Bearbeiten

was hat das (B) in der Klammer zu bedeuten? --Aineias &copy 13:06, 16. Dez 2004 (CET)

Dies bedeutet, dass die Benutzerseite auch existiert. (Jetzt sind sie allerdigns auch bereits gelöscht, daher erscheinen sie in rot) --Filzstift 13:40, 16. Dez 2004 (CET)

Filzstift, bist du dir sicher, dass ALLE alten Diskussionen gelöscht werden sollten? Schaust du dir die Seiten an und prüfst, ob Diskussionen erhaltenswert sind? Bei deiner Löschrate von bis zu 14 Seiten pro Minute (13:06, 16. Dez 2004) kann ich mir nicht vorstellen, dass du in dieser Zeit die Seiten anguckst - tust du das vorher? --SirJective 17:13, 16. Dez 2004 (CET)

Dies ist wegen dem Tabbed Browsing. Ich öffne ca. 30 Seiten, lasse sie laden, lese es dann Seite für Seite (schnell) durch, dann drück ich Alt+D und Enter (damit der Mauscursor bei den Tabs bleibt, Zeitersparnis *g*) und geh direkt zum nächsten Fenster. Nachdem dies erledigt ist beginn ich wieder von vorne und bestätige die Löschung (die dann natürlich sehr schnell verläuft *g*). Alles klar? Und es hatte bis jetzt wirklich nur drei, vier erhaltenswerte Diskussionsseiten gehabt (die aber dann von einem anderen gelöscht wurde)--Filzstift 23:19, 16. Dez 2004 (CET)
Ja, alles klar und volles Einverstaendnis. :) --SirJective 11:22, 17. Dez 2004 (CET)

Das (B) wird bei einer vorhandenen Benutzerseite nicht mehr nachgestellt (Beispiel: 212.117.127.126). Kann das wieder ergänzt werden? Grüße, ElRakı ?! 19:13, 14. Dez 2005 (CET)

Hab die Liste aktualisiert. In den früheren Durchläufen wurde das (B) nicht angezeigt, weil die Liste bei wikisign nur durch lesende Abfragen erzeugt werden kann, und meine obige Abfrage Hilfstabellen erzeugen will. --SirJective 19:31, 28. Jan 2006 (CET)