Bis heute lief die Verlosung des Tickets für den Herbstcampus 2013, wie ich in diesem Beitrag geschrieben habe. Heute Mittag um 12:00 Uhr endete die Teilnahme, die durch einen Kommentar unter dem Beitrag möglich war.
Nun ging es darum, einen Gewinner zu ziehen. Natürlich hätte ich einfach einen Kommentar auswählen können. Augen zu und mit der Maus oder dem Finger auf dem iPad auf einen Kommentar klicken. Aber das ist ja langweilig :).
Vorbereitungen
Da ich Transparenz mag, möchte ich das SQL-Statement, mit dem ich den Gewinner gezogen habe, hier gerne kurz erläutern. Zuerst aber das Statement:
[gist id=6205094 file=’Ticketverlosung Herbstcampus 2013.sql‘]
Wirklich umfangreich ist das natürlich nicht. Interessiert bin ich an der Tabelle wp_comments
, da WordPress dort alle Kommentare aller Beiträge speichert. Da die meisten Spalten keine — für diesen Fall — verwertbaren Informationen enthalten, selektiere ich auch nur comment_author
für den Namen und comment_author_email
für die Kontaktadresse, an die ich im Anschluss an diesem Beitrag die E-Mail verschicke. Ein distinct
sorgt dafür, dass doppelte Kommentare aussortiert werden. Das war zwar in diesem Fall nicht notwendig, aber vielleicht möchte ich das SQL-Statement später noch einmal verwenden.
Das INNER JOIN
verknüpft die Kommentare mit dem Blog-Beitrag mit dem Namen „Herbstcampus 2013: Teilnahme und Ticketverlosung“. Die Kommentare unter diesem Beitrag berechtigen zur Teilnahme. Die Spalte comment_approved
wird auf den Wert 1 abgefragt. Damit werden nur Kommentare berücksichtigt, die von mir über die Admin-Oberfläche akzeptiert wurden. Damit bleibt Spam außen vor. Die Abfrage auf die user_id = 0
sorgt dafür, dass keine Kommentare von mir mitgezählt werden. Da mein Blog keine Benutzer-Registrierung erlaubt, ist nur eine User-ID vergeben und zwar für meinen Account. Alle anderen Benutzer können beim Kommentieren zwar einen Namen angeben, werden aber in WordPress nicht als Benutzer geführt und haben damit keine User-ID.
Zur Sicherheit wird über die Spalte comment_date
noch der Zeitraum der Verlosung überprüft. Auch das war hier im Grunde nicht notwendig, da die Kommentare auch manuell überprüft werden konnten. Aber für spätere Zwecke habe ich dieses kleine Feature schon einmal eingebaut.
Abschließend kommt die Randomisierung zum Einsatz. Über das ORDER BY RAND()
wird randomisiert sortiert und abschließend über LIMIT 1
genau ein Eintrag ausgewählt. Dadurch wird aus den Kommentare per Zufall genau ein Kommentar ausgewählt. ORDER BY
mit RAND()
zu benutzen, ist bei großen Tabellen nicht wirklich zu empfehlen, wir unter anderem hier nachzulesen ist. Allerdings sind es so wenige Kommentare, dass die Performance der Anweisung keinen großen Unterschied macht. Daher habe ich nicht nach einer besseren Lösung gesucht.
Die Ziehung
Das SQL-Statement habe ich über die phpMyAdmin-Oberfläche direkt auf der WordPress-Datenbank ausgeführt. Ich habe fünf Durchläufe durchgeführt, bevor ich den Namen des letzten Durchlaufs als Gewinner gezogen habe. Gewonnen hat:
SMon
Die folgende Abbildung 1 zeigt das ausgeführte SQL-Statement in der phpMyAdmin-Oberfläche. Die E-Mail Adresse habe ich aus dem Screenshot genommen. Abbildung 2 zeigt den Originalkommentar unter dem Beitrag.
Herzlichen Glückwunsch an SMon! Ich werde direkt eine E-Mail schreiben oder Twitter zur Kontaktaufnahme nutzen. Viel Spaß auf dem Herbstcampus 2013 :)!
[…] allen Kommentaren fische ich dann per Zufall einen heraus, wie ich das auch schon bei der letzten Verlosung gemacht […]