Vorgänger / Nachfolger in einer Abfrage

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

  • Vorgänger / Nachfolger in einer Abfrage

    Hallo zusammen,


    ich habe ein PHP/SQL-Problem und finde leider keine Lösung, weil mir wahrscheinlich wieder das richtige Stichwort fehlt. Zur Beschreibung:
    Ich möchte gern Daten (sagen wir mal Kontaktdaten) in einer Tabelle anlegen. Der Einfachheit halber: id, Vorname, Nachname, Ort. Nun möchte ich, dass ich diese Daten ändern kann (Name oder Ort ändern sich), ich möchte die bisherigen Daten aber nicht per UPDATE überschreiben, sondern mit INSERT einen neuen Datensatz anlegen, da ich später auf frühere Daten zurückgreifen muss. Daher habe ich eine weitere Spalte eingeführt: Vorgänger. In dieser wird die ID des Vorgängers gespeichert. Wenn also Max Mustermann mit der id 3 in Düsseldorf wohnt und nach Hamburg zieht, bleibt der Eintrag 3 erhalten, es wird aber ein neuer erstellt mit 123, Max Mustermann, Hamburg, Vorgänger 3. Wenn es ein neuer Kontakt ist, steht bei Vorgänger eben NULL. Nun möchte ich den Datensatz zu Max Mustermann inkl. der gesamten Historie abrufen (da sich der Name ja ändern kann, scheidet WHERE Vorname=Max AND Nachname=Mustermann) aus, sondern ich frage nach der id = 3 ab, möchte nun aber, dass mir auch der Eintrag mit id=123 ausgegeben wird, der ja in der Spalte Vorgänger die 3 hat (und ggf. auch noch ein anderer Eintrag, der als Vorgänger die 123 hat, falls Max Mustermann noch einmal umzieht).
    Nun könnte ich natürlich die ganze Tabelle abrufen und den ganzen Spaß in php ordnen, ich hoffe aber, dass es hierfür eine SQL-interne Lösung gibt, die das einfacher macht, ohne für jeden Nachfolgeeintrag eine neue Abfrage mit neuer id stellen zu müssen.
    Gibt es eine Methode, so etwas in SQL zu implementieren?


    Beste Grüße!

  • #2
    Da kannst du denke ich mit WITH RECURSIVE arbeiten. Alternativ kannst du halt eine ID vergeben unter der du alle zusammenhängenden Datensätze gruppierst.

    Kommentar


    • #3
      Besten Dank, das mit dem WITH RECURSIVE scheint es nur bei PostgreSQL zu geben, ich bin aber an MySQL gebunden, hatte ich vergessen zu erwähnen. Ich werde es mit der ID probieren, das scheint das einfachste zu sein.

      Kommentar

      Lädt...
      X