Servus,
eine kleine Frage stellt sich bei mir,
ich habe eine Datenbank mit vielen, vielen Nutzern, die auch ihr Geburtsdatum eintragen dürfen. Nun will ich auf einer Portalseite diejenigen anzeigen, die in den nächsten 7 Tagen Geburtstag haben.
Die Frage ist, wie bekomme ich diese mit einem MySQL-Query heraus. Ich habe nicht vor alle einzulesen und dann per Backend die Geburtstage herauszufischen.
Ich hatte mir zwei Konzepte überlegt:
a) Ich speichere die Geburtstage als DATETIME-Datentyp. Da fehlt mir aber ein schöner Query.
b) Ich speichere die Geburtstage nach Tag, Monat, Jahr getrennt in der Datenbank. Das Problem wären dann Tage wie der 3.1.1984. Dieser müsste ja schon am 28.12.2005 angezeigt werden. Dort bekomme ich auch keinen ordentlichen Query hin.
Vielleicht hat jemand eine gute Idee. Momentan würde ich mir um Punkt 0 Uhr alle Personen durchgehen und ein Flag bei denjenigen setzen, die angezeigt werden soll.
Gruß,
TheUndeadable
Geburtstage bestimmen
gepostet vor 18 Jahre, 11 Monate von TheUndeadable
gepostet vor 18 Jahre, 11 Monate von Kampfhoernchen
Das wäre auch mein Vorschlag gewesen. Ist die sinnvollste Möglichkeit.
gepostet vor 18 Jahre, 11 Monate von neit
Wieso die Geburtstage nicht als Timestamp speichern und mit 'where MOD(geburtstag, 31536000) < 604800' abfragen? Hab es zwar noch nicht ausprobiert aber ich würds erstmal so versuchen ...
gepostet vor 18 Jahre, 11 Monate von Krisch
Wahrscheinlich weil es wegen den Schaltjahren zu ungenau ist
Aber es würde mich wundern, wenn man das nicht irgendwie mit Timestamps machen könnte.
Aber es würde mich wundern, wenn man das nicht irgendwie mit Timestamps machen könnte.
gepostet vor 18 Jahre, 11 Monate von Drezil
und die, die vor 1970 geboren sind haben pech, oder wie =)
ich würde dein b) ffavorisieren.. nue ne query fällt mir auf anhieb auch nicht ein
ich würde dein b) ffavorisieren.. nue ne query fällt mir auf anhieb auch nicht ein
gepostet vor 18 Jahre, 11 Monate von Chojin
Original von Drezil
und die, die vor 1970 geboren sind haben pech, oder wie =)
Ein linux timestamp kann auch negativ sein... nur so als randbemerkung...
In der datenbank ist es besser das ganze als datetime abzulegen. Du kannst das datum dann ja trotzdem als timestamp berechnen.
reg4rds
chojin
gepostet vor 18 Jahre, 11 Monate von KoMtuR
Das hab ich bei mir getestet und es klappte:
SELECT `name`, UNIX_TIMESTAMP(`birthday`)
FROM `datenbank`.`tabelle`
WHERE
DATEDIFF(
NOW() + INTERVAL 7 DAY,
MAKEDATE(
EXTRACT(YEAR FROM NOW() + INTERVAL 7 DAY),
DAYOFYEAR(`birthday` + INTERVAL (EXTRACT(YEAR FROM NOW()) - EXTRACT(YEAR FROM `birthday`)) YEAR)
)
) BETWEEN 0 AND 7
Die Spalte "birthday" wird als Type DATE gespeichert. DATETIME find ich überflüssig, weil man ja keine Uhrzeit brauch, wann dieser geboren wurde.
Edit: Ok das mit deinem Datum muss noch ein wenig am Query geändert werden, wo gecheckt wird, ob da ne Jahresgrenze ist. Aber dies sollte normal kein Problem sein
Edit2: Ich bin so hohl Ich muss einfach das Jahr extrahieren, welches 7 Tage in der Zukunft liegt. Query hab ich nun aktualisiert
edit3: Schaltjahre werden nun auch richtig berechnet
SELECT `name`, UNIX_TIMESTAMP(`birthday`)
FROM `datenbank`.`tabelle`
WHERE
DATEDIFF(
NOW() + INTERVAL 7 DAY,
MAKEDATE(
EXTRACT(YEAR FROM NOW() + INTERVAL 7 DAY),
DAYOFYEAR(`birthday` + INTERVAL (EXTRACT(YEAR FROM NOW()) - EXTRACT(YEAR FROM `birthday`)) YEAR)
)
) BETWEEN 0 AND 7
Die Spalte "birthday" wird als Type DATE gespeichert. DATETIME find ich überflüssig, weil man ja keine Uhrzeit brauch, wann dieser geboren wurde.
Edit: Ok das mit deinem Datum muss noch ein wenig am Query geändert werden, wo gecheckt wird, ob da ne Jahresgrenze ist. Aber dies sollte normal kein Problem sein
Edit2: Ich bin so hohl Ich muss einfach das Jahr extrahieren, welches 7 Tage in der Zukunft liegt. Query hab ich nun aktualisiert
edit3: Schaltjahre werden nun auch richtig berechnet
gepostet vor 18 Jahre, 11 Monate von TheUndeadable
Vielen Dank, gefällt mir insgesamt.
Insbesondere das letztere, auch wenn ich kein Fan von komplizierten SQL-Queries bin.
DATE wäre in der Tat besser ;-)
Werde es dann mal testen.
Insbesondere das letztere, auch wenn ich kein Fan von komplizierten SQL-Queries bin.
DATE wäre in der Tat besser ;-)
Werde es dann mal testen.
gepostet vor 18 Jahre, 11 Monate von KoMtuR
Ich hab leider keine anderen Funktionen im MySQL Query Browser gefunden, welche dieses Query verkürzen könnten. Vielleicht seh ich halt den Wald vor lauter Bäumen nicht
edit: ich hab das Query mal in die Snippets gepackt, weil dieser Thread bestimmt irgendwann verloren gehen wird
edit: ich hab das Query mal in die Snippets gepackt, weil dieser Thread bestimmt irgendwann verloren gehen wird
gepostet vor 18 Jahre, 11 Monate von schokofreak
Du speicherst dir 2 Sachen:
- Effektives Datum
- Tag im Jahr. Dieser Wert korrigierst du (bei nicht Schaltjahr und nach 28. Feb) mit einer + 1
Somit kannst du die Queries sehr einfach gestalten.
Select * where tag >= (TagImJahr) && tag <(TagImJahr + 5)
Das ganze im Query selbstverständlich wieder auf Schaltjahr geprüft (1 IF)
Und gegen Überläufe geschützt (1 IF)
Gruss
- Effektives Datum
- Tag im Jahr. Dieser Wert korrigierst du (bei nicht Schaltjahr und nach 28. Feb) mit einer + 1
Somit kannst du die Queries sehr einfach gestalten.
Select * where tag >= (TagImJahr) && tag <(TagImJahr + 5)
Das ganze im Query selbstverständlich wieder auf Schaltjahr geprüft (1 IF)
Und gegen Überläufe geschützt (1 IF)
Gruss
gepostet vor 18 Jahre, 11 Monate von TheUndeadable
Gute Idee, habe ich zwar eine Redundanz drin, aber die Sache mit dem Tag im Jahr ist wirklich genial, spart einen Haufen arbeit.
Danke
Danke
gepostet vor 18 Jahre, 11 Monate von schokofreak
ist halt n cache die Frage ist immer, wie oft das ganze ausgeführt wird / ob die umfangreiche Berechnung oft durchgeführt werden würde (und somit viele Ressourcen benötigen würde).
Gruss
Gruss
gepostet vor 18 Jahre, 11 Monate von KoMtuR
Original von schokofreak
Du speicherst dir 2 Sachen:
- Effektives Datum
- Tag im Jahr. Dieser Wert korrigierst du (bei nicht Schaltjahr und nach 28. Feb) mit einer + 1
Somit kannst du die Queries sehr einfach gestalten.
Select * where tag >= (TagImJahr) && tag <(TagImJahr + 5)
Das ganze im Query selbstverständlich wieder auf Schaltjahr geprüft (1 IF)
Und gegen Überläufe geschützt (1 IF)
Gruss
Schön, dass du mein Query nochmal beschrieben hast, was es amcht. nämlich genau das, was du gerade beschreibst
gepostet vor 18 Jahre, 11 Monate von TheUndeadable
hehe, stimmt eigentlich, nur wird der Tag des Jahres statisch gespeichert. Das gefällt mir besser, da ich meine Projekte datenbankunabhängig gestalten möchte. Je komplizierter ein Query, desto größer der Stress, zumindest ist das meine Erfahrung.
Wie schon geschrieben: Vielen Dank an euch.
Wie schon geschrieben: Vielen Dank an euch.
gepostet vor 18 Jahre, 11 Monate von schokofreak
Original von KoMtuR
Schön, dass du mein Query nochmal beschrieben hast, was es amcht. nämlich genau das, was du gerade beschreibst
Stimmt! Es ist in etwa deine Query. Ausser, dass deine Query keinen Index nutzen kann
gepostet vor 18 Jahre, 11 Monate von exception
Ich verwende folgende relativ simple Query (performance-technisch wahrscheinlich nicht optimal, dafür halt einfacher)
Sieht in etwa so aus:
SELECT (
DAYOFMONTH(NOW()) = DAYOFMONTH(birth)
AND
MONTH(NOW()) = MONTH(ds_profile.birth)
) FROM ds_profile
Vom aktuellen Datum werden Monat und Tag mit dem Datum in der DB verglichen.
Bei Geburtstag wird 1 zurückgegeben ansonsten 0.
Sieht in etwa so aus:
SELECT (
DAYOFMONTH(NOW()) = DAYOFMONTH(birth)
AND
MONTH(NOW()) = MONTH(ds_profile.birth)
) FROM ds_profile
Vom aktuellen Datum werden Monat und Tag mit dem Datum in der DB verglichen.
Bei Geburtstag wird 1 zurückgegeben ansonsten 0.
gepostet vor 18 Jahre, 11 Monate von TheUndeadable
Wenn ich den Query richtig lese, gibst du alle Personen zurück, die heute Geburtstag haben. Ich hätte aber gerne einen Query, der alle Geburtstage der nächsten 5 Tage zurückgibt.
Die obenstehenden Hilfestellungen sollten soweit funktionieren, getestet habe ich sie noch nicht.
Die obenstehenden Hilfestellungen sollten soweit funktionieren, getestet habe ich sie noch nicht.
gepostet vor 18 Jahre, 11 Monate von exception
Original von TheUndeadable
Wenn ich den Query richtig lese, gibst du alle Personen zurück, die heute Geburtstag haben. Ich hätte aber gerne einen Query, der alle Geburtstage der nächsten 5 Tage zurückgibt.
Die obenstehenden Hilfestellungen sollten soweit funktionieren, getestet habe ich sie noch nicht.
Sorry, das hatte ich überlesen.
gepostet vor 18 Jahre, 10 Monate von Toby
Wie wärs mit sowas:
SELECT * FROM Tabelle
WHERE SUBSTRING( Feld , 6, 10 ) BETWEEN '01-18'
AND '01-30'
Das geht auch auf Datefelder (zumindest bei MySQL).
Wenn SQL alles erledigen soll, könnte man auch
SELECT * FROM Tabelle
WHERE SUBSTRING( Feld , 6, 10 ) BETWEEN DATE_FORMAT(NOW(),'%m-%d')
AND DATE_FORMAT(NOW() + INTERVAL 7 DAY,'%m-%d')
hernehmen.
Aber mal ein anderes Problem: Was macht man mit Leuten, die am 29.02. Geburtstag haben? Die könnte man ja am 01.03 oder am 28.02. anzeigen lassen, aber ich glaub, die bisherigen Abfragen (einschließlich meiner) würden sojemanden einfach übersehen (sofern kein Schaltjahr), oder?
SELECT * FROM Tabelle
WHERE SUBSTRING( Feld , 6, 10 ) BETWEEN '01-18'
AND '01-30'
Das geht auch auf Datefelder (zumindest bei MySQL).
Wenn SQL alles erledigen soll, könnte man auch
SELECT * FROM Tabelle
WHERE SUBSTRING( Feld , 6, 10 ) BETWEEN DATE_FORMAT(NOW(),'%m-%d')
AND DATE_FORMAT(NOW() + INTERVAL 7 DAY,'%m-%d')
hernehmen.
Aber mal ein anderes Problem: Was macht man mit Leuten, die am 29.02. Geburtstag haben? Die könnte man ja am 01.03 oder am 28.02. anzeigen lassen, aber ich glaub, die bisherigen Abfragen (einschließlich meiner) würden sojemanden einfach übersehen (sofern kein Schaltjahr), oder?
gepostet vor 18 Jahre, 10 Monate von Chojin
Also langsam versteh ich das ganze Theater hier nichtmehr...
SELECT *, DAYOFYEAR(GeburtstagsDATEtypeFeld) - DAYOFYEAR(CURDATE()) AS checkdate FROM Tabelle
WHERE checkdate BETWEEN 0 AND 7
Hier mal mein Beitrag... keine ahnung ob Fehler drinn sind -> hab nicht getestet.
Ich kann mir trotzdem nicht vorstellen, dass die Lösung dieses Problems so kompliziert sein kann.
Btw meine Lösung berücksichtigt keine Schaltjahre, weil ich dieses Problem dann als relativ unkritisch ansehe.Personen die am 29.02. Geburstag haben werden demzufolge einen Tag zufrüh oder zu spät angezeigt.
Reg4rds
chojin
SELECT *, DAYOFYEAR(GeburtstagsDATEtypeFeld) - DAYOFYEAR(CURDATE()) AS checkdate FROM Tabelle
WHERE checkdate BETWEEN 0 AND 7
Hier mal mein Beitrag... keine ahnung ob Fehler drinn sind -> hab nicht getestet.
Ich kann mir trotzdem nicht vorstellen, dass die Lösung dieses Problems so kompliziert sein kann.
Btw meine Lösung berücksichtigt keine Schaltjahre, weil ich dieses Problem dann als relativ unkritisch ansehe.Personen die am 29.02. Geburstag haben werden demzufolge einen Tag zufrüh oder zu spät angezeigt.
Reg4rds
chojin
gepostet vor 18 Jahre, 10 Monate von KoMtuR
Original von Chojin
Also langsam versteh ich das ganze Theater hier nichtmehr...
SELECT *, DAYOFYEAR(GeburtstagsDATEtypeFeld) - DAYOFYEAR(CURDATE()) AS checkdate FROM Tabelle
WHERE checkdate BETWEEN 0 AND 7
Hier mal mein Beitrag... keine ahnung ob Fehler drinn sind -> hab nicht getestet.
Ich kann mir trotzdem nicht vorstellen, dass die Lösung dieses Problems so kompliziert sein kann.
Btw meine Lösung berücksichtigt keine Schaltjahre, weil ich dieses Problem dann als relativ unkritisch ansehe.Personen die am 29.02. Geburstag haben werden demzufolge einen Tag zufrüh oder zu spät angezeigt.
Reg4rds
chojin
Ja deine Version beachtet überhaupt keine Schaltjahre... Was ist wenn wir uns im Schaltjahr bewegen und du ein Geburtstag hast, der nach dem 28. ist aber das Geburtsjahr kein Schaltjahr währe. Dann haut deine Rechnung nicht mehr hin, weil der dann die Geburtstage ein Tag zu früh ausgibt. zumindest nachm 28.2.
(hoffe es ist zu früh aber auf jedenfall haste in nem Schaltjahr die rechenfehler hoch 3 ab dem 28.)
gepostet vor 18 Jahre, 10 Monate von schokofreak
das mist schaltjahren ist bei dir problematisch.
Plus die Laufzeit.
Plus die Laufzeit.
gepostet vor 18 Jahre, 10 Monate von BjoernLilleike
Das mit dem Schaltjahr hat er doch extra geschrieben, dass er den Fehler in Kauf nimmt. Und wenn es nur darum geht, ein paar Tage vorher Geburtstage auf 'ner Homepage anzuzeigen, käme es mir auch nicht auf den einen Tag Genauigkeit in Schaltjahren an. Who cares?
gepostet vor 18 Jahre, 10 Monate von KoMtuR
Original von BjoernLilleike
Das mit dem Schaltjahr hat er doch extra geschrieben, dass er den Fehler in Kauf nimmt. Und wenn es nur darum geht, ein paar Tage vorher Geburtstage auf 'ner Homepage anzuzeigen, käme es mir auch nicht auf den einen Tag Genauigkeit in Schaltjahren an. Who cares?
Entweder ganz oder garnicht. Wenn dann kann man doch gleich mit random paar namen aus der DB picken und sagen, dass sie irgendwann Geburtstag haben
gepostet vor 18 Jahre, 10 Monate von BjoernLilleike
Das ist eine typische Programmierereinstellung, die jeden Projektaufwand explodieren lässt.
Betrachten wir uns doch mal den konkreten Fall:
Zielsetzung ist es, ein paar Tage im Voraus die kommenden Geburtstage der Spieler anzeigen zu können, damit auch diejenigen die nur alle 3 Tage online sind, den Geburtstag des liebsten Feindes nicht verpassen können, um ihm rechtzeitig eine Geburtstagsüberraschung schicken zu können.
Dabei kommt es auf einen Tag mehr oder weniger nicht an, wenn der Zeitraum einfach mit entsprechendem Sicherheitspolster gewählt ist.
Einen großen zusätzlichen Aufwand zu treiben, um Geburtstage Anfang März in Schaltjahren genau so akurat zu berücksichtigen wie sonst, ist unnötig und vergeudet Projektressourcen.
Für mein laienhaftes Verständnis war Chojins Code wesentlich übersichtlicher, als die vorhergehenden Lösungsansätze. Er hat dafür eine akzeptable Funktionseinschränkung hingenommen, dies erkannt und dokumentiert.
Natürlich ist das hier bereits lange nur noch Showlaufen: "Wer hat den schönsten Code." - Aber im Real Life wäre jeder Projektleiter dankbar für die gezeigte Einstellung: Was will ich SINNGEMÄSS erreichen und was ist der schnellste Weg dorthin und nicht lass uns mal eine Doktorarbeit über Vorwarnzeiten von Geburtstagen in Schaltjahren verfassen.
p.s. Dein sehr schlanker Code mit zufällig bestimmten Spielern erfüllt leider nicht die vom Kunden erwartete Funktionalität, aber der Ansatz geht in die richtige Richtung!
p.p.s Mit meinem Eventsystem könnte ich einfach bei Änderung des Geburtstages ein Event für das Vorwarndatum eintragen. Der Event-Daemon trägt dann bei diesem Eventtyp den Namen in den Homepage-Content ein. Außerdem setzt er gleich das nächste Event, um dem Spieler auch vom System her zum Geburtstag zu gratulieren und danach den Homepage-Content wieder zu bereinigen.. Habe ich die Aufgabe auch gelöst ;-)
Betrachten wir uns doch mal den konkreten Fall:
Zielsetzung ist es, ein paar Tage im Voraus die kommenden Geburtstage der Spieler anzeigen zu können, damit auch diejenigen die nur alle 3 Tage online sind, den Geburtstag des liebsten Feindes nicht verpassen können, um ihm rechtzeitig eine Geburtstagsüberraschung schicken zu können.
Dabei kommt es auf einen Tag mehr oder weniger nicht an, wenn der Zeitraum einfach mit entsprechendem Sicherheitspolster gewählt ist.
Einen großen zusätzlichen Aufwand zu treiben, um Geburtstage Anfang März in Schaltjahren genau so akurat zu berücksichtigen wie sonst, ist unnötig und vergeudet Projektressourcen.
Für mein laienhaftes Verständnis war Chojins Code wesentlich übersichtlicher, als die vorhergehenden Lösungsansätze. Er hat dafür eine akzeptable Funktionseinschränkung hingenommen, dies erkannt und dokumentiert.
Natürlich ist das hier bereits lange nur noch Showlaufen: "Wer hat den schönsten Code." - Aber im Real Life wäre jeder Projektleiter dankbar für die gezeigte Einstellung: Was will ich SINNGEMÄSS erreichen und was ist der schnellste Weg dorthin und nicht lass uns mal eine Doktorarbeit über Vorwarnzeiten von Geburtstagen in Schaltjahren verfassen.
p.s. Dein sehr schlanker Code mit zufällig bestimmten Spielern erfüllt leider nicht die vom Kunden erwartete Funktionalität, aber der Ansatz geht in die richtige Richtung!
p.p.s Mit meinem Eventsystem könnte ich einfach bei Änderung des Geburtstages ein Event für das Vorwarndatum eintragen. Der Event-Daemon trägt dann bei diesem Eventtyp den Namen in den Homepage-Content ein. Außerdem setzt er gleich das nächste Event, um dem Spieler auch vom System her zum Geburtstag zu gratulieren und danach den Homepage-Content wieder zu bereinigen.. Habe ich die Aufgabe auch gelöst ;-)
gepostet vor 18 Jahre, 10 Monate von Krisch
Das ist die typisch Besserwissereinstellung, nicht auf das Thema eingehen aber trotzdem recht haben wollen.
Es geht darum Geburtstage anzeigen zu lassen und zwar in einem bestimmen Intervall. Das hat überhaupt nichts mit Showlaufen zu tun, das Problem betrifft auch andere Themen. Und wenn man die Geburtstage an einem bestimmten Tag anzeigen lassen will, kommt man nicht drumherum.
Showlaufen ist wenn jemand auf sein eigenes Können hinweist ohne zur Lösung beizutragen.
Es geht darum Geburtstage anzeigen zu lassen und zwar in einem bestimmen Intervall. Das hat überhaupt nichts mit Showlaufen zu tun, das Problem betrifft auch andere Themen. Und wenn man die Geburtstage an einem bestimmten Tag anzeigen lassen will, kommt man nicht drumherum.
Showlaufen ist wenn jemand auf sein eigenes Können hinweist ohne zur Lösung beizutragen.
gepostet vor 18 Jahre, 10 Monate von Kampfhoernchen
Bitte nich in eine Diskussion ausarten lassen.
Danke.
Danke.
gepostet vor 18 Jahre, 10 Monate von marlord
Original von KoMtuR
Das hab ich bei mir getestet und es klappte:
...
MAKEDATE(
EXTRACT(YEAR FROM NOW() + INTERVAL 7 DAY),
DAYOFYEAR(`birthday` + INTERVAL (EXTRACT(YEAR FROM NOW()) - EXTRACT(YEAR FROM `birthday`)) YEAR)
...
gibt die Funktion "MAKEDATE"?
gepostet vor 18 Jahre, 10 Monate von KoMtuR
Naja denkste ich teste es und es geht nicht und poste es dann mit dem Zusatz, dass ich es sogar getestet hab, um mich dann zum Affen zu machen?
http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html
edit: ich hoffe ich habe dich richtig verstanden. du hast doch gefragt obs die Funktion MAKEDATE überhaupt gibt oder?
http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html
edit: ich hoffe ich habe dich richtig verstanden. du hast doch gefragt obs die Funktion MAKEDATE überhaupt gibt oder?
gepostet vor 18 Jahre, 10 Monate von Chojin
Um... wie ist den überhaupt die konkrete lösung für das Schaltjahr problem?
Bei meiner lösung wird derjenige der am 29. Februar geburtstag hat so behandelt als hätte er am 1. März geburstag, wenn kein schaltjahr ist.
In einem schaltjahr funktioniert der lösungsansatz auf den tag genau.
Ich sehe aber mein problem, dass wenn jemand in einem schaltjahr geboren wurde, sein geburtstag um einen tag verschoben ist im vergleich zum kontrolljahr, wenn sein geburtstag nach dem 28.Februar liegt.
Wie wollt ihr generell den fall behandeln, wenn jemand am 29.Februar geboren ist? Darf die person dann nur alle 4 Jahre angezeigt werden?
reg4rds
chojin
Bei meiner lösung wird derjenige der am 29. Februar geburtstag hat so behandelt als hätte er am 1. März geburstag, wenn kein schaltjahr ist.
In einem schaltjahr funktioniert der lösungsansatz auf den tag genau.
Ich sehe aber mein problem, dass wenn jemand in einem schaltjahr geboren wurde, sein geburtstag um einen tag verschoben ist im vergleich zum kontrolljahr, wenn sein geburtstag nach dem 28.Februar liegt.
Wie wollt ihr generell den fall behandeln, wenn jemand am 29.Februar geboren ist? Darf die person dann nur alle 4 Jahre angezeigt werden?
reg4rds
chojin
gepostet vor 18 Jahre, 10 Monate von Kampfhoernchen
Also ich hab nen Kumpel, der an besagtem algorithmusfeindlichem Datum Geburtstag hat. Er feierte seinen 18. am 29., aber seit er älter ist immer am 1., da is er einen Tag lang noch nen Tag jünger. Rein rechtlich ist erst ab dem 1.3. ein Jahr älter. Gabs mal nen Schuldspruch, der das eindeutig geklärt hat (Jugendrecht vs. Erwachsenenrecht).
Eigentlich wahnsinn, wie so was völlig banales so große Schwierigkeiten bereiten kann.
Eigentlich wahnsinn, wie so was völlig banales so große Schwierigkeiten bereiten kann.
gepostet vor 18 Jahre, 10 Monate von schokofreak
Original von Kampfhoernchen
Also ich hab nen Kumpel, der an besagtem algorithmusfeindlichem Datum Geburtstag hat. Er feierte seinen 18. am 29., aber seit er älter ist immer am 1., da is er einen Tag lang noch nen Tag jünger. Rein rechtlich ist erst ab dem 1.3. ein Jahr älter. Gabs mal nen Schuldspruch, der das eindeutig geklärt hat (Jugendrecht vs. Erwachsenenrecht).
Eigentlich wahnsinn, wie so was völlig banales so große Schwierigkeiten bereiten kann.
Ich wär für n Gesetzestext, welcher Zeugungen 9 Monate für nem allfälligen 29. Verbietet
gepostet vor 18 Jahre, 10 Monate von Kallisti
Original von Kampfhoernchen
Also ich hab nen Kumpel, der an besagtem algorithmusfeindlichem Datum Geburtstag hat. Er feierte seinen 18. am 29., aber seit er älter ist immer am 1., da is er einen Tag lang noch nen Tag jünger. Rein rechtlich ist erst ab dem 1.3. ein Jahr älter. Gabs mal nen Schuldspruch, der das eindeutig geklärt hat (Jugendrecht vs. Erwachsenenrecht).
Eigentlich wahnsinn, wie so was völlig banales so große Schwierigkeiten bereiten kann.
Wie moechte er gleichzeitig in einem Schaltjahr geboren worden sein und seinen 18. feiern? Meines Wissens gehen die Ausnahmen zu gewissen Jahrhunderten und Jahrtausenden nur dazu, dass ein Schaltjahr ausfaellt... - nicht jedoch, dass es ein zusaetzliches gibt.
gepostet vor 18 Jahre, 10 Monate von cyberbeat
als DATE speichern und folgendes tuts: FLOOR((CURDATE() - birthday)/10000)
gepostet vor 18 Jahre, 10 Monate von Kampfhoernchen
Original von Kallisti
Original von Kampfhoernchen
Also ich hab nen Kumpel, der an besagtem algorithmusfeindlichem Datum Geburtstag hat. Er feierte seinen 18. am 29., aber seit er älter ist immer am 1., da is er einen Tag lang noch nen Tag jünger. Rein rechtlich ist erst ab dem 1.3. ein Jahr älter. Gabs mal nen Schuldspruch, der das eindeutig geklärt hat (Jugendrecht vs. Erwachsenenrecht).
Eigentlich wahnsinn, wie so was völlig banales so große Schwierigkeiten bereiten kann.
Wie moechte er gleichzeitig in einem Schaltjahr geboren worden sein und seinen 18. feiern? Meines Wissens gehen die Ausnahmen zu gewissen Jahrhunderten und Jahrtausenden nur dazu, dass ein Schaltjahr ausfaellt... - nicht jedoch, dass es ein zusaetzliches gibt.
Und wo is da der Zusammehang?
gepostet vor 18 Jahre, 10 Monate von Chojin
Original von cyberbeat
als DATE speichern und folgendes tuts: FLOOR((CURDATE() - birthday)/10000)
lol - das ergebniss mit unschärfe speichern hilft da auch nix.
Btw: tolle leistung, erster post und dann gleich im fortgeschrittenen Bereich
reg4rds
chojin
gepostet vor 18 Jahre, 10 Monate von BjoernLilleike
Original von Chojin
Btw: tolle leistung, erster post und dann gleich im fortgeschrittenen Bereich
Du tust gerade so, als ob es kein Leben vor GalaxyNews gäbe.
gepostet vor 18 Jahre, 10 Monate von schokofreak
Original von BjoernLilleike
Original von Chojin
Btw: tolle leistung, erster post und dann gleich im fortgeschrittenen Bereich
Du tust gerade so, als ob es kein Leben vor GalaxyNews gäbe.
Es gibt ein Leben vor Galaxynews?
gepostet vor 18 Jahre, 10 Monate von Kampfhoernchen
No Spam plz.
Aber was das mit der "unschärfe" bringen soll, weiß ich auch nicht.
Aber was das mit der "unschärfe" bringen soll, weiß ich auch nicht.
gepostet vor 18 Jahre, 10 Monate von Kallisti
Original von Kampfhoernchen
Original von Kallisti
Original von Kampfhoernchen
Also ich hab nen Kumpel, der an besagtem algorithmusfeindlichem Datum Geburtstag hat. Er feierte seinen 18. am 29., aber seit er älter ist immer am 1., da is er einen Tag lang noch nen Tag jünger. Rein rechtlich ist erst ab dem 1.3. ein Jahr älter. Gabs mal nen Schuldspruch, der das eindeutig geklärt hat (Jugendrecht vs. Erwachsenenrecht).
Eigentlich wahnsinn, wie so was völlig banales so große Schwierigkeiten bereiten kann.
Wie moechte er gleichzeitig in einem Schaltjahr geboren worden sein und seinen 18. feiern? Meines Wissens gehen die Ausnahmen zu gewissen Jahrhunderten und Jahrtausenden nur dazu, dass ein Schaltjahr ausfaellt... - nicht jedoch, dass es ein zusaetzliches gibt.
Und wo is da der Zusammehang?
Der 29te ist nur alle vier Jahre.
Ist er in einem Schaltjahr geboren, so kann er seinen 16ten oder seinen 20sten Geburtstag in einem Schaltjahr gefeiert haben - nicht aber seinen 18ten.
Daher laesst deine Geschichte an ihrer Glaubwuerdigkeit zweifeln.
gepostet vor 18 Jahre, 10 Monate von Kampfhoernchen
*nachrechen*.
Hm, muss dann mal Telefonieren, kann sein dass ich da was falsch in Erinnerung hab.
Nichts desto trotz, hier die Lösung für das Problem:
SELECT irgendwas FROM tabelle
WHERE DATE_FORMAT(spalte, '%d-%m') = DATE_FORMAT(DATE_ADD(CURDATE, INTERVAL 1 DAY), '%d-%m');
Habs jetzt nicht getestet, aber rein der Logik nach müsste das das Problem lösen, zumindest wenn das Datenbanksystem richtig rechnet. Das Interval wäre entsprechend der "vorwarnzeit" anzupassen.
Hm, muss dann mal Telefonieren, kann sein dass ich da was falsch in Erinnerung hab.
Nichts desto trotz, hier die Lösung für das Problem:
SELECT irgendwas FROM tabelle
WHERE DATE_FORMAT(spalte, '%d-%m') = DATE_FORMAT(DATE_ADD(CURDATE, INTERVAL 1 DAY), '%d-%m');
Habs jetzt nicht getestet, aber rein der Logik nach müsste das das Problem lösen, zumindest wenn das Datenbanksystem richtig rechnet. Das Interval wäre entsprechend der "vorwarnzeit" anzupassen.
gepostet vor 18 Jahre, 10 Monate von Kampfhoernchen
So, is geklärt:
Es war nicht sein 18. Geburtstag, sondern sein 24ter. Gibt da wohl so eine Art "Ermessensspielraum", ob zwischen 18 und 24 Jugendrecht oder Erwachsenenrecht angewandt werden kann. Um diesen ging es.
Es war nicht sein 18. Geburtstag, sondern sein 24ter. Gibt da wohl so eine Art "Ermessensspielraum", ob zwischen 18 und 24 Jugendrecht oder Erwachsenenrecht angewandt werden kann. Um diesen ging es.
gepostet vor 18 Jahre, 10 Monate von Mudder
Nicht ganz..
DATE_FORMAT(spalte, '%m-%d') <= DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 7 DAY), '%m-%d')
AND
DATE_FORMAT(spalte, '%m-%d') >= DATE_FORMAT(CURDATE(), '%m-%d');
Diese Variante hat bei mir funktioniert.. auch mit dem 29.02...
SELECT * FROM user WHERE
DATE_FORMAT(spalte, '%m-%d') <= DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 7 DAY), '%m-%d')
AND
DATE_FORMAT(spalte, '%m-%d') >= DATE_FORMAT(CURDATE(), '%m-%d');
Diese Variante hat bei mir funktioniert.. auch mit dem 29.02...
gepostet vor 18 Jahre, 10 Monate von Kampfhoernchen
Ja, hast recht. Ich hatte ne ähnliche Problemstellung, bei der aber nur 1 Tag vorher angezeigt werden sollte. Deine beachtet ne längere "Vorwarnzeit".
gepostet vor 18 Jahre, 10 Monate von Chojin
Original von Mudder
Nicht ganz..
[...]
Diese Variante hat bei mir funktioniert.. auch mit dem 29.02...
Funzt aber nicht über Neujahr
Am 2005-12-28 wird niemand angezeigt der am 2006-01-02 Geburtstag hat.
Hier mein letzter Beitrag zum Thema:
SELECT name
FROM test_user
WHERE
(YEAR(DATE_ADD(CURDATE(), INTERVAL 7 DAY))-YEAR(geburtstag)) - (RIGHT(DATE_ADD(CURDATE(), INTERVAL 7 DAY),5)
>
(YEAR(CURDATE())-YEAR(geburtstag)) - (RIGHT(CURDATE(),5)
reg4rds
chojin