*jiriki*: Datensätze löschen mit MySQL ( &PHP )

Moin,
ich möchte die Seite <a href="http://www.isroldenburg.org/index.php?pid=awards_USDF%awards" target="_blank">http://localhost/sports.horse/index.php?pid=awards_USDF%awards</a> als über ein CMS wartbar machen, und sitze dabei bei folgendem Problem:

Ich hab die Tabelle wie ein Forum organisiert, dass heisst, die Level-Überschriften sowie die einzelnen Hengste werden über eine parentID mit der nächsthöheren Ebene verknüpft. Jetzt will ich, dass alle Unterpunkte (rekursiv in den Unterebenen) gelöscht werden, wenn ich einen bestimmten Oberpunkt lösch. Wenn ich z.B. nen Award lösche, sollen sowohl alle Level- wie auch alle zu diesen Levels gehörenden Hengste gelöscht werden.

Wie bewerkstellige ich das am besten? Subselects stehn mir bei meiner MySQL-Version noch nicht zur Verfügung.

Grazie, *jiriki*

  1. echo $begrüßung;

    ... die [Daten] werden über eine parentID mit der nächsthöheren Ebene verknüpft. Jetzt will ich, dass alle Unterpunkte (rekursiv in den Unterebenen) gelöscht werden, wenn ich einen bestimmten Oberpunkt lösch.

    Wie bewerkstellige ich das am besten?

    So wie du es schon gesagt hast. Rekursiv. Das ist mit Aufwand verbunden und bedeutet mehrere Befehle an die Datenbank zu senden. Vorausgesetzt, du hast schon alle Daten im Speicher, kannst du die IDs der zu löschenden Datensätze hier schon ermitteln und dann WHERE id IN (..., ...) das auf einen Befehl reduzieren.

    Vielleicht findest du allerdings auch ein Nested Set und dessen Möglichkeiten interessanter und eleganter. Dazu zwei Links:

    http://ffm.junetz.de/members/reeg/dev/html/node92.html
    http://www.develnet.org/36.html

    Grazie, *jiriki*

    Prego.

    echo "$verabschiedung $name";

    1. Hallo,
      ich denke das geht einfacher mit

      "On Delete Cascade"

      bei der Tabellendefinition in deiner DB.
      Dann macht das das DBMS für dich.
      Allerdings bedeutet das auch, das IMMER wenn du den
      Satz löschst alles was darunter mitverknüpft ist auch löschst.
      Meistens kann man aber auch noch irgendwelche Einschränkungen
      als Check oder Restrikt Bedingungen hinzufügen.
      Wie die Syntax für MySQL dahingehend genau aussieht
      weiß ich nicht. Aber das ist sicher einfacher
      und schneller als es selber zu programmieren.
      Gruß
      Sonja

      1. echo $begrüßung;

        ich denke das geht einfacher mit

        "On Delete Cascade"

        Wie die Syntax für MySQL dahingehend genau aussieht
        weiß ich nicht.

        Eine solche gibt es nicht. Und es gibt auch (noch) keine Trigger, die man vielleicht dafür einsetzen kann.

        echo "$verabschiedung $name";

        1. echo $begrüßung;

          ich denke das geht einfacher mit

          "On Delete Cascade"

          Wie die Syntax für MySQL dahingehend genau aussieht
          weiß ich nicht.

          Eine solche gibt es nicht. Und es gibt auch (noch) keine Trigger, die man vielleicht dafür einsetzen kann.

          Na ja, wäre noch eine Möglichkeit gewesen.
          Aber wenn das  nicht unterstützt wird,
          dann gehts halt nicht :-)

          echo "$verabschiedung $name";