Die nächsten Geburtstage (PHP & MySQL-Frage)

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
smaugilein
Mitglied
Beiträge: 115
Registriert: 20.01.2005 23:54
Wohnort: Essen
Kontaktdaten:

Die nächsten Geburtstage (PHP & MySQL-Frage)

Beitrag von smaugilein »

Tag auch!
Ich hab auf meiner Homepage das Forum richtig schön in die Seite integriert und auch die Forenaccounts werden für verschiedene Funktionen auf der Seite genutzt.
Nun hab ich einen schönen Kalender programmiert, welcher sich unter anderem aus der phpbb_users-Tabelle die Geburtsdaten der User herausholt und am entsprechenden Tag einen Eintrag macht. Aber dies nur so nebenbei.
Der Knackpunkt ist: In der phpbb_users-Tabelle werden die Geburtsdaten einzeln - also Tag, Monat und Jahr - gespeichert. (ist halt einfacher für den Kalender gewesen)
Nun möchte ich eine Liste der nächsten Geburtstage machen, komme damit aber nicht so recht weiter.

Ich möchte nämlich die SELECT-Funktion dazu nutzen, die nächsten (z.B. drei) Geburtstage auszugeben. Ich kann zwar nach Monat und Tag sortieren - aber kann ich auch erst Einträge ab einem bestimmten Tag ("heute") ausgeben lassen? Und wie könnte man das Problem beim Aufruf dieser Funktion am 31.12. (sprich: In diesem Jahr kein Geburtstag mehr => bei Januar wieder anfangen) lösen?

Wär wirklich dankbar für einen klugen Tipp!

smaugilein
www.musikfachschaft.de

P.S.: Ich möchte die SELECT-Funktion aus dem Grund nutzen, da in absehbarer Zeit immer mehr User vorhanden sein werden. Wenn ich dann erst alle Einträge in ein Array pack und die durch eine FOR-Schleife durchlaufen lasse, wir das bei vielen Usern wirklich lange dauern! :-(
PhilippK
Vorstand
Vorstand
Beiträge: 14662
Registriert: 13.08.2002 14:10
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von PhilippK »

Versuch's mal mit

Code: Alles auswählen

SELECT IF(STR_TO_DATE(CONCAT_WS('-', YEAR(NOW()), Monat, Tag), '%Y-%m-%d') >= CURDATE(),STR_TO_DATE(CONCAT_WS('-', YEAR(NOW()), Monat, Tag), '%Y-%m-%d'),STR_TO_DATE(CONCAT_WS('-', YEAR(NOW())+1, Monat, Tag), '%Y-%m-%d'))
wobei Monat und Tag jeweils durch die Feldangabe zu ersetzen ist. Ungetestet und ab MySQL 4.1 lauffähig.

Gruß, Philipp
Kein Support per PN!
Der Sozialstaat ist [...] eine zivilisatorische Errungenschaft, auf die wir stolz sein können. Aber der Sozialstaat heutiger Prägung hat sich übernommen. Das ist bitter, aber wahr. (Horst Köhler)
Meine Mods
Benutzeravatar
smaugilein
Mitglied
Beiträge: 115
Registriert: 20.01.2005 23:54
Wohnort: Essen
Kontaktdaten:

Beitrag von smaugilein »

Danke für die schnelle Antwort!

Nur: Ich hab den Geburtstag in

user_geburtstag1 (Jahr), user_geburtstag2 (Monat) und user_geburtstag3 (Tag)

gespeichert. Das ist mit deinem Code nicht vereinbar, oder?
PhilippK
Vorstand
Vorstand
Beiträge: 14662
Registriert: 13.08.2002 14:10
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von PhilippK »

Wieso sollt er es nicht sein? Dort wo Monat steht, fügst du user_geburtstag2 ein, dort wo Tag steht, user_geburtstag3.

Gruß, Philipp
Kein Support per PN!
Der Sozialstaat ist [...] eine zivilisatorische Errungenschaft, auf die wir stolz sein können. Aber der Sozialstaat heutiger Prägung hat sich übernommen. Das ist bitter, aber wahr. (Horst Köhler)
Meine Mods
Benutzeravatar
smaugilein
Mitglied
Beiträge: 115
Registriert: 20.01.2005 23:54
Wohnort: Essen
Kontaktdaten:

Beitrag von smaugilein »

Ah, richtig! *brettvormkopf*

Das werd ich jetzt schleunigst mal ausprobieren! Vielen, vielen Dank!!
Benutzeravatar
smaugilein
Mitglied
Beiträge: 115
Registriert: 20.01.2005 23:54
Wohnort: Essen
Kontaktdaten:

Beitrag von smaugilein »

Code: Alles auswählen

SQL Error : 1064 You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(CONCAT_WS('-', YEAR(NOW()), user_geburtstag2, user_geburtstag1

SELECT IF(STR_TO_DATE(CONCAT_WS('-', YEAR(NOW()), user_geburtstag2, user_geburtstag1), '%Y-%m-%d') >= CURDATE(),STR_TO_DATE(CONCAT_WS('-', YEAR(NOW()), user_geburtstag2, user_geburtstag1), '%Y-%m-%d'),STR_TO_DATE(CONCAT_WS('-', YEAR(NOW())+1, user_geburtstag2, user_geburtstag1), '%Y-%m-%d'))
Hab ich eine Klammer zu viel bzw. zu wenig? Ich seh aber nix...! :-?
PhilippK
Vorstand
Vorstand
Beiträge: 14662
Registriert: 13.08.2002 14:10
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von PhilippK »

Welche MySQL-Version verwendest du denn?

Gruß, Philipp
Kein Support per PN!
Der Sozialstaat ist [...] eine zivilisatorische Errungenschaft, auf die wir stolz sein können. Aber der Sozialstaat heutiger Prägung hat sich übernommen. Das ist bitter, aber wahr. (Horst Köhler)
Meine Mods
Benutzeravatar
smaugilein
Mitglied
Beiträge: 115
Registriert: 20.01.2005 23:54
Wohnort: Essen
Kontaktdaten:

Beitrag von smaugilein »

phpMyAdmin hat geschrieben:MySQL 4.0.24-standard
Geht's damit nicht? :-(
PhilippK
Vorstand
Vorstand
Beiträge: 14662
Registriert: 13.08.2002 14:10
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von PhilippK »

Man müsste nach 'ner Lösung suchen, die auch auf der Plattform läuft: http://dev.mysql.com/doc/refman/4.1/en/ ... tions.html

Gruß, Philipp
Kein Support per PN!
Der Sozialstaat ist [...] eine zivilisatorische Errungenschaft, auf die wir stolz sein können. Aber der Sozialstaat heutiger Prägung hat sich übernommen. Das ist bitter, aber wahr. (Horst Köhler)
Meine Mods
Benutzeravatar
smaugilein
Mitglied
Beiträge: 115
Registriert: 20.01.2005 23:54
Wohnort: Essen
Kontaktdaten:

Beitrag von smaugilein »

Alles klar! Werd mich mal informieren! Danke für die Info!!
Wo kann ich denn den Text für die Signatur eintippen? *wunder*
Antworten

Zurück zu „Coding & Technik“