Seite 1 von 1

MySQL-Query für Geburtstagsliste

Verfasst: 07.01.2010 09:03
von TeddyKlaus
Hallo,

ich habe für unser Serviceteam eine Geburtstagsliste programmiert, die - nach Datum sortiert - naja, was wohl, die Geburtstage der User mit noch ein paar anderen Daten anzeigt.

Das Query

Code: Alles auswählen

SELECT phpbb_users.user_id AS 'User-ID', username AS 'Benutzername', user_posts AS 'Anzahl Postings', user_from AS 'Wohnort', DATE_FORMAT( DATE_ADD( '1970-01-01 01:00:00', INTERVAL user_regdate SECOND ) , '%d.%m.%Y' ) AS 'Registrierdatum', DATE_FORMAT( DATE_ADD( '1970-01-01 01:00:00', INTERVAL user_lastvisit SECOND ) , '%d.%m.%Y' ) AS 'Letzter Logon', user_email, user_birthday AS 'Geburtstag', substring(user_birthday, 1,2) AS GTDD, substring(user_birthday, 4,2) AS GTMM, CASE WHEN user_avatar = ' ' THEN 'Nein' ELSE 'Ja' END AS 'Avatar' FROM phpbb_users WHERE user_birthday > 0 AND user_id > 0 ORDER BY GTMM, GTDD ASC
funktioniert einwandfrei, allerdings nur solange Monat oder Tag nicht einstellig ist. Dann wird ja bekanntermassen z.B. aus einem "06" ein "<blank>6".

Kann mir jemand sagen, wie ich im Query ein mögliches Leerzeichen in Stelle 1 und 3 des Felds user_birthday in eine "0" (Null) ändern kann. Ich sortiere es nach Monat/Tag am Ende des querys, in php ausserhalb des Querys möchte ich das nicht machen, weil das Sortieren des Ergebnisarrays nach der Abfrage mir zu kompliziert ist.

Ich hatte dran gedacht, mit z.B. IF (substring(user_birthday, 1,1),' ','0') AS GTD1 zu arbeiten, aber irgendwie schaffe ich das nicht.

So I need help...

Danke

Klaus

Re: MySQL-Query für Geburtstagsliste

Verfasst: 07.01.2010 13:55
von Helmut
Hallo TeddyKlaus,

das Problem liegt bei dir wohl daran dass dein Datumsformat nicht mit dem in der Tabelle _users zusammen passt. Die Geburtstage sind im Format j-n-Y eingetragen, user_regdate und user_lastvisit als timestamp.

Leider schreibst du nicht genau was am Ende als Ergebnis rauskommen soll bzw. zusätzlich alles angezeigt werden soll.

Schaue dir doch mal den Upcoming Birthday list 1.0.3 Mod von lefty74 an, da kannst du Geburtstage der nächsten x Tage anzeigen lassen. Der Mod selber ist nicht groß und lässt sich bestimmt für deine Zwecke anpassen.

Gruß Helmut

Re: MySQL-Query für Geburtstagsliste

Verfasst: 07.01.2010 14:33
von TeddyKlaus
Hallo Helmut,

Danke für Deine Antwort.

das Format vonm user_birthday ist doch TT-MM-JHJJ. Und wenn ich in der Datenbank bei den Geburtsdaten manuell das blank durch eine Null ersetze, dann passt die Liste auch wunderbar.
Aber dann funktioniert die Anzeige der Geburtstage im Index nicht mehr.

Im Portal werden ja auch die Geburtstage der nächsten 7 Monate angezeigt.

Ich generiere mit der Liste eine Mail, die auf Knopdfruck dann vom Serviceteam an den User verschickt werden kann.

Das ersetzen des Blanks durch eine Null nur innerhalb des Queries müsste doch auch möglich sein.

Gruß
Klaus

Re: MySQL-Query für Geburtstagsliste

Verfasst: 08.01.2010 10:25
von Helmut
Hallo TeddyKlaus,

das Format vonm user_birthday ist doch TT-MM-JJJJ, aber ohne führende Null vorne weg (j-n-Y), Das Problem dabei ist, dass j und n nur in der Datumsangabe vom php zur Verfügung steht, in mysql gibt es nur die Version mit führender Null (d und m). Ich hatte das gleiche Problem wo ich aus einem Kalender die Events der nächsten x Tage auslesen wollte und habe bis jetzt keine Lösung gefunden wo ich das schon in den Queries bei der Abfrage erledigen kann. Zum Glück bietete mein Kalender diese Funktion schon, wurde aber für die aktuelle Version nicht verwendet. Hier kannst du das nachlesen.

So als Idee ist mir noch gekommen dass es vielleicht als FUNCTION oder PROCEDURE in mysql gehen könnte, aber da kenne ich mich nicht gut genug aus.

Also der Mod von lefty74 bietet doch im Prinzip schon das was du brauchst, du hast die Geburtstage der User innerhalb der nächsten x Tage. Du kannst ja bei der Abfrage auch noch weitere Kriterien einbringen, z.B. mindestens x Beiträge im Forum. Auch die weitere Verwendung der Liste sollte doch machbar sein, statt es auf dem Index anzeigen zu lassen, Mails mit dem Geburtstag, ist auch das Jahr (Alter) schon verfügbar, zu generieren. Diese Liste bzw. für jeden einzeln könntest du dann per Absenden Button verschicken. Den Button kannst du z.B. nur den Admins sichtbar machen.

Die Anzeige im Portal funktioniert so ähnlich wie der Mod von lefty74, kannst dir ja mal anschauen.


Gruß Helmut