mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Fr 29.03.2024 10:24 Benutzername: Passwort: Auto-Login

Thema: [solved][MySQL] neue/alte Geburtstage ermitteln. vom 01.03.2007


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> [solved][MySQL] neue/alte Geburtstage ermitteln.
Autor Nachricht
grafzahl
Threadersteller

Dabei seit: 13.04.2006
Ort: Magdeburg
Alter: 39
Geschlecht: Männlich
Verfasst Do 01.03.2007 14:46
Titel

[solved][MySQL] neue/alte Geburtstage ermitteln.

Antworten mit Zitat Zum Seitenanfang

Hi Leute, ich hab bereits kurz nach einer eventuellen Lösung gesucht, bin jedoch nicht wirklich fündig gewurden.

Leider kenne ich mich mit den Datenfunktionen unter MySQL auch nicht wirklich aus.

Folgende Aufgabenstellung: Aus einer Datenbank sollen immer die Mitglieder ausgegeben werden die in den nächsten 5 Tagen Geburtstag haben und die, die in den letzten 5 Tagen Geburtstag hatten. Die Daten liegen im typischen MySQL-Data-Format in der Datenbank, also z.B. 1972-09-05 00:00:00

Wie ist es möglich diese Werte sicher zu ermitteln, ich hatte schon einen Lösungsansatz, jedoch weis ich nicht wie ich die 5 Tage abziehen, bzw. aufstocken kann und vor allem gabs das Problem beim Jahreswechsel, da wurde durch die DAYOFYEAR-Anweisung nicht weiter gerechnet.

Hat da evtl. n Lösungsansatz?


Zuletzt bearbeitet von grafzahl am So 04.03.2007 10:55, insgesamt 1-mal bearbeitet
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
beeviZ

Dabei seit: 30.09.2002
Ort: -
Alter: -
Geschlecht: Männlich
Verfasst Do 01.03.2007 14:51
Titel

Antworten mit Zitat Zum Seitenanfang

speichere die Timestamps der Geburtstage ab, und mach dann n select
WHERE bday > time()-60*60*24*5 OR bday < time()+60*60*24*5.



//edit:
was n bullshit *balla balla*


Zuletzt bearbeitet von beeviZ am Do 01.03.2007 15:22, insgesamt 2-mal bearbeitet
  View user's profile Private Nachricht senden
Anzeige
Anzeige
Skyw4lker

Dabei seit: 30.08.2004
Ort: Bergisch Gladbach
Alter: 43
Geschlecht: Männlich
Verfasst Do 01.03.2007 14:52
Titel

Antworten mit Zitat Zum Seitenanfang

Code:
DATE_ADD(date,INTERVAL expr  unit), DATE_SUB(date,INTERVAL expr  unit)


klick

du baust dir nen select und machst in der where bedingung ziehst du vom aktuellen datum
einmal 5 tage ab, dann ein AND und dann tust du 5 tage drauf.
Dann also where bday > heute - 5 tage AND bday < heute + 5 tage (prosa)

// das mit dem jahr hatte ich nicht bedacht, ich probier mal eben was aus


Zuletzt bearbeitet von Skyw4lker am Do 01.03.2007 15:00, insgesamt 3-mal bearbeitet
  View user's profile Private Nachricht senden
grafzahl
Threadersteller

Dabei seit: 13.04.2006
Ort: Magdeburg
Alter: 39
Geschlecht: Männlich
Verfasst Do 01.03.2007 15:14
Titel

Antworten mit Zitat Zum Seitenanfang

beeviZ hat geschrieben:
speichere die Timestamps der Geburtstage ab, und mach dann n select
WHERE bday > time()-60*60*24*5 OR bday < time()+60*60*24*5.


Meinst du n Unixtimestamp? Geht leider nicht da da auch Leute von Anno-sonstwas dabei sind und der Server keine negativen Timestamp unterstützt.

@Skyw4lker: Danke, ich hab mir grad auch was kleines gebastelt das scheinbar sogar ganz gut funktioniert!

Code:

SELECT id, geburtstag, YEAR(CURRENT_DATE())-YEAR(geburtstag) age, datediff(MAKEDATE(YEAR(CURRENT_DATE())+1,IF(DAYOFYEAR(geburtstag) > DAYOFYEAR(LAST_DAY(MAKEDATE(YEAR(CURRENT_DATE()), 365))),DAYOFYEAR(LAST_DAY(MAKEDATE(YEAR(CURRENT_DATE()), 365))),DAYOFYEAR(geburtstag)) ),CURRENT_DATE()) % DAYOFYEAR(LAST_DAY(MAKEDATE(YEAR(CURRENT_DATE()), 365))) days_to_birthday FROM ordo_mitarbeiter HAVING days_to_birthday < 5 OR days_to_birthday > 361;


Da kommt am Ende n Ergebniss mit Geburtstag und Tagen bis zum geburtstag heraus, am Ende schau ich dann halt wer in den nächsten 5 Tagen Geburtstag hat oder bei dem Der Geburtstag halt schon vorbei is und bei dem der nächste Geburtstag somit 351 Tage hin ist.

Aber ich blick durch den Query nicht mehr durch, was kürzeres wär also cool Lächel
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Skyw4lker

Dabei seit: 30.08.2004
Ort: Bergisch Gladbach
Alter: 43
Geschlecht: Männlich
Verfasst Do 01.03.2007 16:12
Titel

Antworten mit Zitat Zum Seitenanfang

Code:
SELECT DATE_ADD(datum, INTERVAL (EXTRACT(YEAR FROM NOW()) - EXTRACT(YEAR FROM datum)) YEAR) AS bdays  FROM testDatum
WHERE ( DATE_ADD(DATE_ADD(datum, INTERVAL (EXTRACT(YEAR FROM NOW()) - EXTRACT(YEAR FROM datum)) YEAR) , INTERVAL 5 DAY) ) >= NOW()
AND   ( DATE_SUB(DATE_ADD(datum, INTERVAL (EXTRACT(YEAR FROM NOW()) - EXTRACT(YEAR FROM datum)) YEAR) , INTERVAL 5 DAY) ) < NOW()


wobei datum deine datumsspalte mit den geburtstagen ist

bei näherem erklärungsbedarf bitte nachfragen *zwinker*


Zuletzt bearbeitet von Skyw4lker am Do 01.03.2007 16:17, insgesamt 2-mal bearbeitet
  View user's profile Private Nachricht senden
grafzahl
Threadersteller

Dabei seit: 13.04.2006
Ort: Magdeburg
Alter: 39
Geschlecht: Männlich
Verfasst Fr 02.03.2007 13:51
Titel

Antworten mit Zitat Zum Seitenanfang

Danke Skywalker,

ich hab jetzt erstmal mit der Lösung weiterexperimentiert

Code:
SELECT id, geburtstag, YEAR(CURRENT_DATE())-YEAR(geburtstag) age, datediff(MAKEDATE(YEAR(CURRENT_DATE())+1,IF(DAYOFYEAR(geburtstag) > DAYOFYEAR(LAST_DAY(MAKEDATE(YEAR(CURRENT_DATE()), 365))),DAYOFYEAR(LAST_DAY(MAKEDATE(YEAR(CURRENT_DATE()), 365))),DAYOFYEAR(geburtstag)) ),CURRENT_DATE()) % DAYOFYEAR(LAST_DAY(MAKEDATE(YEAR(CURRENT_DATE()), 365))) days_to_birthday FROM ordo_mitarbeiter HAVING days_to_birthday < 5 OR days_to_birthday > 361;


und dabei einen merkwürdigen Fehler gemerkt. Der Query erstellt ja gleich ein virtuelles Feld das die Tage bis zum Geburtstag ermittelt. Das Klappt soweit auch ganz gut, jedoch rechnet er bei manchen Einträgen einen Tag einfach drauf. Wie ich gemerkt hab wohl bei allen Einträgen die ein gerades Jahr haben. Ist also zb jemand im Jahr 1984 geboren wird ein Tag drauf gerechnet, ist er 1985 oder 1983 geboren passt die Berechnung. Jemand evtl. eine Ahnung woran das liegen könnte? Die Daten liegen also in der Form 1984-03-29 00:00:00 in der Datenbank.

EDIT:

Ok, Problem gelöst, wer mehr wissen möchte -> Hier gibts die Infos!


Zuletzt bearbeitet von grafzahl am So 04.03.2007 10:55, insgesamt 1-mal bearbeitet
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
 
Ähnliche Themen [solved] / [PHP/MySQL] Abfrage: Alte Veranstaltungen filtern
MySQL von doppelten Werten den Mittelwert ermitteln
strato und mysql [solved]
[solved] [php/mysql] messenger funktion
[mysql] Nur aus lesen was größer als ... ist [solved]
[solved] / [PHP/MySQL] Ergebnis der Abfrage = 0
Neues Thema eröffnen   Neue Antwort erstellen
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.