Geburtstage in MySQL Datenbank mit PHP auswerten

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Geburtstage in MySQL Datenbank mit PHP auswerten

    Hallo!

    Ich hab vor einiger Zeit mal angefangen mir eine Datenbank mit allen meinen Bekannten mit Adresse Telefonnr. etc. und auch den Geburtstagen anzulegen.

    Leider hab ich den Geburtstag der Einfachheit halber als String abgelegt.
    (Bsp.: 09.03.1981)

    Diese Liste lese ich mit php aus und stelle sie mir als HTML-Seite dar.
    Nun bin ich aber auf die Idee gekommen diese Seite doch nach bestimmten Spalten sortieren zu lassen.

    Bei den Geburtstagen sortiert dementsprechend nun nur nach den Tagen.

    Nun die Frage:

    Gib es eine Möglichkeit die Geburtstage zu sortieren, ohne die Datensätze neu schreiben zu müssen?
    Oder sollte ich die Geburtstage besser als date() ablegen?
    Im Ergebniss soll es nun so aussehen, dass er erst alle die im Januar geboren sind aufsteigend sortiert, danach die im Februar, und so weiter, so dass ich eine Art Geburtstagsablauf für das Jahr bekommen.

    Schöne Grüße
    Hoppel
    Zuletzt geändert von Hoppel; 27.02.2003, 10:17.

  • #2
    hi,
    stells besser auf date() um.

    dann kannst du alles mit einer abfrage ala

    "Select ... order by month(geburtstagsfeldname) ASC"

    nach monaten sortiert ausgeben.
    Kissolino.com

    Kommentar


    • #3
      Re: Geburtstage in MySQL Datenbank mit PHP auswerten

      Original geschrieben von Hoppel
      Leider hab ich den Geburtstag der Einfachheit halber als String abgelegt.
      (Bsp.: 09.03.1981)
      tja, was man vorher als einfachste lösung erachtet hat, rächt sich oft später... zu wenig nachgedacht.


      aber du kannst dir ja ein kleines script schreiben, welches einmal alle datumsfelder in der db umwandelt.

      dafür legst du dir zunächst eine zusätzliche spalte an, am besten als integer für einen unix-timestamp (es sei denn du hast daten vor dem 1.1.1970?).

      dann lässt du ein script über alle datensätze laufen, liest deinen datums-string aus, zerlegst ihn mit substr() in tag, monat und jahr, und erzeugst daraus mit mktime() einen timestamp, den du dann mit update wieder in die db schreibst.

      nachdem du das für alle datensätze gemacht hast, kannst du deine ursprüngliche datumsspalte löschen und in kuhzunft die neue verwenden...
      I don't believe in rebirth. Actually, I never did in my whole lives.

      Kommentar


      • #4
        Warum so umständlich das umwandeln des Strings in datum kann auch ein einfaches update query erledigen.
        Beantworte nie Threads mit mehr als 15 followups...
        Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

        Kommentar


        • #5
          erstmal:

          Code:
          UPDATE adressen SET geburtstag=CONCAT(SUBSTRING(geburtstag, 7, 4), '-', SUBSTRING(geburtstag, 4, 2), '-', SUBSTRING(geburtstag, 1, 2));
          und dann:

          Code:
          ALTER TABLE adressen CHANGE geburtsdatum geburtsdatum DATE NOT NULL;
          fertig ...
          carpe noctem

          [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
          [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

          Kommentar


          • #6
            EDIT:
            goth´s Idee aufgegriffen:
            Code:
            update leute set geburtstag=concat(
              right(geburtstag, 2), '-',
              mid(geburtstag, 4, 2), '-',
              left(geburtstag, 2));
            ## das update funktioniert nur, wenn Tag und Monat zweistellig sind!
            alter table leute
              change geburtstag geburtstag date;
            dann noch die PHP-Skripte umstellen:
            aus select geburtstag wird select date_format(geburtstag, '%d.%m.%Y)
            insert und update müssen natürlich auch angepasst werden.

            fertig

            sind Tage und Monate auch einstellig:
            Code:
            update leute set geburtstag=concat(
              substring(geburtstag, '.', -1), '-',
              lpad(substring(substring(geburtstag, '.', 1), '.', -1), 2, '0'), '-',
              lpad(substring(geburtstag, '.', 1), 2, '0')
            );
            mein Sport: mein Frühstück: meine Arbeit:

            Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

            Kommentar


            • #7
              Danke Leute!

              Hab mir die Daten per script umschreiben lassen.
              Nicht dass ich die ca. 70 Einträge nicht auch von Hand geschafft hätte. ;-)
              Aber man ist ja faul.

              Auf die Idee mit dem Umschreiben wär ich nie gekommen. Thx.

              Hoppel

              Kommentar

              Lädt...
              X