Geburtstag - welches Format in MySQL?!

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.
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Geburtstag - welches Format in MySQL?!

Beitrag 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ß
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17473
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Beitrag 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']);
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Beitrag 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ß
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Benutzeravatar
nickvergessen
Ehrenadmin
Beiträge: 11559
Registriert: 09.10.2006 21:56
Wohnort: Stuttgart, Germany
Kontaktdaten:

Re: Geburtstag - welches Format in MySQL?!

Beitrag 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.
kein Support per PN
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Beitrag von mgutt »

In der MySQL Abfrage?

Ich plane mehrere tausend Einträge, daher muss die Filterung schon bei der Abfrage passieren.
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Benutzeravatar
easygo
Mitglied
Beiträge: 2170
Registriert: 03.09.2004 13:45
Kontaktdaten:

Re: Geburtstag - welches Format in MySQL?!

Beitrag 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
Benutzeravatar
Jan500
Ehemaliges Teammitglied
Beiträge: 4199
Registriert: 01.03.2003 21:32
Wohnort: Hamburg
Kontaktdaten:

Beitrag 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
"Life begins at 40 Knots...!" :D
kein (kostenlosen) Support per pn, mail, icq usw. | Kostenlosen Support gibt es hier im Forum!
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Beitrag 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:
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Benutzeravatar
Jan500
Ehemaliges Teammitglied
Beiträge: 4199
Registriert: 01.03.2003 21:32
Wohnort: Hamburg
Kontaktdaten:

Beitrag 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
"Life begins at 40 Knots...!" :D
kein (kostenlosen) Support per pn, mail, icq usw. | Kostenlosen Support gibt es hier im Forum!
Benutzeravatar
easygo
Mitglied
Beiträge: 2170
Registriert: 03.09.2004 13:45
Kontaktdaten:

Beitrag 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
Antworten

Zurück zu „Coding & Technik“