MySQL-Query für Geburtstagsliste

In diesem Forum kann man Fragen zur Programmierung stellen, die bei der Entwicklung von Mods für phpBB 3.0.x oder dem Modifizieren des eigenen Forums auftauchen.
Forumsregeln
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf die neuste phpBB-Version, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Antworten
Benutzeravatar
TeddyKlaus
Mitglied
Beiträge: 86
Registriert: 08.09.2005 18:44
Wohnort: Emsdetten
Kontaktdaten:

MySQL-Query für Geburtstagsliste

Beitrag 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
Wenn man nur einen Hammer zur Verfügung hat, sieht jedes Problem wie ein Nagel aus
Helmut
Mitglied
Beiträge: 2048
Registriert: 27.12.2002 20:35
Wohnort: Augsburg

Re: MySQL-Query für Geburtstagsliste

Beitrag 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
Ich bin nicht ganz dicht.... na und.
Benutzeravatar
TeddyKlaus
Mitglied
Beiträge: 86
Registriert: 08.09.2005 18:44
Wohnort: Emsdetten
Kontaktdaten:

Re: MySQL-Query für Geburtstagsliste

Beitrag 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
Wenn man nur einen Hammer zur Verfügung hat, sieht jedes Problem wie ein Nagel aus
Helmut
Mitglied
Beiträge: 2048
Registriert: 27.12.2002 20:35
Wohnort: Augsburg

Re: MySQL-Query für Geburtstagsliste

Beitrag 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
Ich bin nicht ganz dicht.... na und.
Antworten

Zurück zu „[3.0.x] Mod Bastelstube“