PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Abfrage für Geburtstagsliste mit php und MySQL


stickedy
2007-03-15, 14:57:06
Ich hab ein kleines Problem eine Geburtstagsliste mit php und mysql zu erstellen bzw. ich steh ziemlich aufm Schlauch...

Also, das ganze soll so funktionieren, dass der Monat ausgewählt wird (Januar - Dezember) und dann die entsprechenden Personen zwecks Ausdruck aufgelistet werden. Das ganze drumherum ist nun auch net das Problem, aber ich hab hab Probleme, die MySQL-Abfrage hinzubekommen, weil das Geburtstag in einer Spalte "geburtstag" im Format YYYY-MM-DD (also z.B. 1943-01-15) vorliegt und ich momentan net drauf komm, wie ich da dann mein Wunschmonat selektieren kann. Wahrscheinlich ist es ganz einfach, aber irgendwie hock ich da schon seit drei Stundend dran und verzweifel fast... Danke für ein paar Tipps und Hinweise.

Marscel
2007-03-15, 16:18:55
SELECT * FROM usertabelle WHERE geburtstag LIKE '%-08-%';

08 wäre halt August.

PatkIllA
2007-03-15, 19:13:14
Ansonsten gibt es noch die Month Funktion.
Ich will doch hoffen, dass die Spalte ein Datumsfeld und kein String ist.

stickedy
2007-03-15, 23:43:02
SELECT * FROM usertabelle WHERE geburtstag LIKE '%-08-%';

08 wäre halt August.
*kopfklatsch* Danke!! Ich wusste, dass ich irgendwie aufm Schlauch stand, das ist ja total simpel... An manchen Tagen sollte man sich mit sowas einfach net befassen ;)

Ansonsten gibt es noch die Month Funktion.
Ich will doch hoffen, dass die Spalte ein Datumsfeld und kein String ist.Ehrlich gesagt, keine Ahnung... Ich hab das nicht verbrochen, sondern "darf" jetzt "nur" ein paar Sachen reparieren bzw. hinzufügen. Es ist jedenfalls kein Spaß...

BoneDaddy
2007-03-16, 01:08:54
ich arbeite bei egal was für daten ja immer lieber mit dem timestamp. der macht dsa in meinen augen um einiges einfacher.

stickedy
2007-03-16, 11:58:06
Die Spalte ist im date Format. Naja, jetzt bekomm ich das schon irgendwie hin denk ich mal. Aufgelistet werden jetzt schon alle die sollen, jetzt muss ich nur noch irgendwie das Alter berechnen lassen. Bin wieder viel zu sehr aus der Übung gekommen... :(

P2oldi
2007-03-16, 14:25:35
das Alter kannst doch direkt im SQL mit ausrechnen lassen

stickedy
2007-03-16, 15:25:06
Du meinst mit php? War keine große Sache, ist nun alles fertig. Zumindest die Funktionen. Am Layout bastel ich die nächsten Tage, das künstlerische ist net so meins...

P2oldi
2007-03-19, 09:13:25
so, war am WE net on, darum ein bissel Verspätung :)

Net direkt per PHP, SQL stellt ja auch Datumsfunktionen zur Verfügung, do daß die DB sich dann im Endeffekt um die Berechnung kümmert, und Du das net in die PHP Funktionen packen mußt. Kann u.U. performancemäßig interessant sein.

Hab grade kein mySQL hier auf Arbeit, aber so nach dem Motto
SELECT a.*, (curdate() - a.geburtstag) AS age FROM tabelle
die berechnung ist bissel komplizierter in den Klammer, aber Prinzip sollte ja klar sein ;)

stickedy
2007-03-19, 12:06:17
Ah, OK, danke für den Typ! Das ist gut zu wissen... So ganz firm bin ich mit dem ganzen nämlich net, mach da mer so learning by doing. Bei dem momentanen Projekt ist der Performance-Aspekt net wirklich wichtig, da die Abfrage grad mal max. 15 Ergebnisse umfasst. Da laß ich das mit php machen, das funktioniert ja nun wie es soll.
Aber für ein anderes Projekt könnte das wesentlich interessanter sein, da sind die Datensätze > 15.000 und tw auch einige Abfragen mit ein paar Tausend Ergebnissen. Da soll irgendwann auch mal ne Geburtstags-Abfrage mit rein...

darph
2007-03-19, 12:30:55
Aber für ein anderes Projekt könnte das wesentlich interessanter sein, da sind die Datensätze > 15.000 und tw auch einige Abfragen mit ein paar Tausend Ergebnissen. Da soll irgendwann auch mal ne Geburtstags-Abfrage mit rein...
Der Vergleich mit LIKE ist äußerst inperformant (was'n Wort). Du siehst ja, wie die Antwortzeiten hier im Forum ansteigen, wenn du nach einem Begriff mit Wildcards suchst. Da ist es schon deutlich angenehmer, wenn du den Tip von P2oldi beherzigst - das wurde schließlich auf genau sowas optimiert.

Kinman
2007-03-19, 19:44:20
Ah, OK, danke für den Typ! Das ist gut zu wissen... So ganz firm bin ich mit dem ganzen nämlich net, mach da mer so learning by doing. Bei dem momentanen Projekt ist der Performance-Aspekt net wirklich wichtig, da die Abfrage grad mal max. 15 Ergebnisse umfasst. Da laß ich das mit php machen, das funktioniert ja nun wie es soll.
Aber für ein anderes Projekt könnte das wesentlich interessanter sein, da sind die Datensätze > 15.000 und tw auch einige Abfragen mit ein paar Tausend Ergebnissen. Da soll irgendwann auch mal ne Geburtstags-Abfrage mit rein...

Prinzipiell gut und schön performance-optimiert zu arbeiten, aber >15.000 (< 20.000?) Datensätze ist absolut nix. Wenn Du nur ein bisschen vergleichst hast vielliecht (wenn überhaupt) 1/10 Sekunde unterschied.

Ich habe unlängst eine gröbere Abfrage mit Strings erstellt bei ca. 1.800.000 Datensätze. Zuerst schlampig (musste sehr schnell erstellt werden, zum testen) und anschließend optimiert. Die Scriptzeit ist von 0.45 Sek auf 0.38 sek gesunken...

mfg Kinman

darph
2007-03-19, 19:51:21
Ja und ich hatte mal ein Script gehabt, daß zu eine Keyword passende andere Keywords gefunden hat und alle Strings, in denen diese vorkamen.

Wir mußten dann die Laufzeit von PHP-Scripten erhöhen serverseitig, weil die standardmäßigen 30 Sekunden nicht ausgereicht haben. Waren allerdings auch ein paar mehr Datensätze.

The_Invisible
2007-03-19, 20:19:56
naja, das schlimmste was man machen kann ist in schleifen jeweils eine eigene abfrage zu starten (am besten noch mit datenbank "connect / query / disconnect"). ich hatte da mal ein script von ner ausführzeit von >1min auf ca 1sec optimiert :D

mfg

darph
2007-03-19, 20:36:29
Ey! X-D

Nein, das war eine einzige Query, wenn ich mich recht entsinne. ;(

skicu
2007-03-22, 19:03:05
ich arbeite bei egal was für daten ja immer lieber mit dem timestamp. der macht dsa in meinen augen um einiges einfacher.
Ein wenig umständlich, wenn jemand im Jahr 1968 geboren ist, meinst du nicht? :wink: