Seite 1 von 3

Geburtstag - welches Format in MySQL?!

Verfasst: 30.04.2007 13:37
von mgutt
Hallo,

nachdem es für phpBB bereits 4 verschiedene Formate an Birthday Mods gibt, frage ich mich, welches Format oder welche Form der Speicherung eigentlich die sinnvollste ist?

In meinem Fall geht es um Geburtstage von Stars. Später möchte ich filtern nach Geburtsjahr (wer ist alles 1980 geboren?) und nach Tag/Monat (wer ist alles am 1. Januar geboren?).

Bei der Eingabe macht man ja der Einfachheit halber drei Dropdowns oder drei Eingabefelder:
Tag | Monat | Jahr
oder einfacher:
dd|mm|yyyy

Jetzt könnte ich diese Daten als MEDIUMINT speichern:
ddmmyyyy

Aber dann ist das mit dem Filter nicht so schick. Dann eher jeden Wert einzeln?

dd TINYINT
mm TINYINT
yyyy SMALLINT

Oder ein Feld im Format DATE?

Oder gar als UNIX Timestamp?

Welche Filterung sollte ich noch berücksichtigen bzw. vielleicht noch irgendwas bei der "normalen" Ausgabe? (z.b. alles einzeln plus UNIX um, dann den Geburtstag mit date() ausgeben zu können)

Gruß

Verfasst: 30.04.2007 13:44
von Dr.Death
Das beste ist der UNIX Timestamp.

dann kannst Du alles einzelnd herauspicken mit der "create_date" Funktion.

Beispiel:

Code: Alles auswählen

		$b_day 		= create_date('j', $timestamp, $board_config['board_timezone']);
		$b_month 	= create_date('n', $timestamp, $board_config['board_timezone']);
		$b_year 	= create_date('Y', $timestamp, $board_config['board_timezone']);
		$b_hour 	= create_date('G', $timestamp, $board_config['board_timezone']);
		$b_minute 	= create_date('i', $timestamp, $board_config['board_timezone']);
		$b_second 	= create_date('s', $timestamp, $board_config['board_timezone']);

Verfasst: 30.04.2007 13:48
von mgutt
Und wie filtere ich dann bei der mysql Abfrage nach ddmm?

yyyy wäre ja keine Sache, da man nur zwischen X und Y suchen lassen muss. Aber bei ddmm wüsste ich jetzt keine praktikable Lösung.

Gruß

Re: Geburtstag - welches Format in MySQL?!

Verfasst: 30.04.2007 13:53
von nickvergessen
mgutt hat geschrieben:Jetzt könnte ich diese Daten als MEDIUMINT speichern:
ddmmyyyy
Aber dann ist das mit dem Filter nicht so schick. Dann eher jeden Wert einzeln?
Du kannst ja die Variable auf dem Abschnitt von 1-2 3-4 udn 5-8 untersuchen lassen. Dann sollte das auch kein Problem sein.

Verfasst: 30.04.2007 13:57
von mgutt
In der MySQL Abfrage?

Ich plane mehrere tausend Einträge, daher muss die Filterung schon bei der Abfrage passieren.

Re: Geburtstag - welches Format in MySQL?!

Verfasst: 30.04.2007 16:31
von easygo
mgutt hat geschrieben:Oder ein Feld im Format DATE?
Also wenns um schnelle Abfragen und noch dazu um Geburtstage (vor 1970?) geht, dann kann so eine Spalte vom
Typ DATE (YYYY-MM-DD) schon ein ziemlicher Vorteil sein gegenüber TIMESTAMP (begrenzt auf 1970 bis 2037)

Hier gibts paar interessante Beispiele dazu:

http://dev.mysql.com/doc/refman/5.1/de/ ... tions.html

Verfasst: 30.04.2007 18:58
von Jan500
wenn das ein unix pc server ist sollte es beim timestamp eigentlich auch keine probleme geben... der gibt dann negative timestamps bei < 1970 aus...

bei windows macht der afaik nen error

Jan

Verfasst: 30.04.2007 19:04
von mgutt
Ja aber auch nur bei PHP4.

Ansonsten geht der Timestamp auch ins Minus.

Also ich habe es jetzt erstmal so gewählt, dass ich den UNIX Timestamp, Tag, Monat und Jahr in der Datenbank habe. Also insgesamt vier Felder.

Wobei MONTH() in der MySQL-Abfrage auch interessant aussieht. :lol:

Verfasst: 30.04.2007 19:08
von Jan500
wieso jetzt vier felder? das beinhaltet der timestamp doch schon alles :-S
bei der abfrage machst du dann ein BETWEEN mit vorher genierten timestamps....

Jan

Verfasst: 30.04.2007 19:09
von easygo
@ Jan500

Hab hier aber nur die Spaltentypen verglichen :wink: und bei TIMESTAMP beschränkt
sich MySQL von selbst auf den Zeitraum ab 1970, soviel ich weiß. easy