Seite 1 von 1

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

Verfasst: 06.11.2005 22:06
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! :-(

Verfasst: 06.11.2005 22:44
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

Verfasst: 06.11.2005 23:11
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?

Verfasst: 06.11.2005 23:13
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

Verfasst: 06.11.2005 23:14
von smaugilein
Ah, richtig! *brettvormkopf*

Das werd ich jetzt schleunigst mal ausprobieren! Vielen, vielen Dank!!

Verfasst: 06.11.2005 23:23
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...! :-?

Verfasst: 07.11.2005 06:52
von PhilippK
Welche MySQL-Version verwendest du denn?

Gruß, Philipp

Verfasst: 07.11.2005 10:26
von smaugilein
phpMyAdmin hat geschrieben:MySQL 4.0.24-standard
Geht's damit nicht? :-(

Verfasst: 07.11.2005 12:52
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

Verfasst: 07.11.2005 13:01
von smaugilein
Alles klar! Werd mich mal informieren! Danke für die Info!!