DELETE Anweisung für Kinder
Janine
- datenbank
Moin!
DELETE FROM
_menueWHERE
id = 10
wie kann ich die Kinder gleich mitlöschen lassen?
es gibt ein Datenbankfeld Namens hid und uid
1. wenn id = hid ist und uid = 0 soll er noch alle Datensätze löschen, wo hid sagen wir mal 10 ist
2. wenn hid = uid ist soll er noch alle löschen, wo hid = 10 und uid = 10 ist
kann man das alles in einer SQL-Anweisung schreiben, oder muss ich das mit PHP in 3 Anweisungen aufteilen?
Datenbank: MySQL 4.0.25
PHP: 5.0.4
Apache 1.3.33
danke
cu
Janine :-)
Mir ist nicht ganz klar was du machen willst. Wär vielleicht klarer, wenn du mal die Strucktur der Tabelle zeigen könntest.
Moin!
Mir ist nicht ganz klar was du machen willst. Wär vielleicht klarer, wenn du mal die Strucktur der Tabelle zeigen könntest.
+----+-----+-----+---------
| id | hid | uid |
+----+-----+-----+---------
| 1 | 1 | 0 |
+----+-----+-----+---------
| 2 | 1 | 1 |
+----+-----+-----+---------
| 3 | 1 | 1 |
+----+-----+-----+---------
| 4 | 4 | 0 |
+----+-----+-----+---------
| 5 | 5 | 0 |
+----+-----+-----+---------
| 6 | 5 | 5 |
+----+-----+-----+---------
| 7 | 5 | 6 |
+----+-----+-----+---------
1, 4 und 5 ist die erste Ebene
2 und 3 ist die zweite Ebene von 1
6 ist die zweite Ebene von 5
7 ist eine Unterebene von 6
es gibt insgesammt nur 3 Ebenen
wenn ich 1 lösche, müssen also die ID's 1, 2 und 3 gelöscht werden
lösche ich 5, müssen 6 und 7 mitgelöscht werden
lösche ist 6 muss 7 mitgelöscht werden
lösche ich 7, wird nur 7 gelöscht
Janine
Hello,
+----+-----+-----+---------
| id | hid | uid |
+----+-----+-----+---------
| 1 | 1 | 0 |
+----+-----+-----+---------
| 2 | 1 | 1 |
+----+-----+-----+---------
| 3 | 1 | 1 |
+----+-----+-----+---------
| 4 | 4 | 0 |
+----+-----+-----+---------
| 5 | 5 | 0 |
+----+-----+-----+---------
| 6 | 5 | 5 |
+----+-----+-----+---------
| 7 | 5 | 6 |
+----+-----+-----+---------1, 4 und 5 ist die erste Ebene
2 und 3 ist die zweite Ebene von 1
6 ist die zweite Ebene von 5
7 ist eine Unterebene von 6
Könntest Du nochmal ein paar erklärende Worte verlieren zu den Spaltenbezeichnern?
Wieso hat die id(7) in hid eine 5 stehen?
Irgendwie macht das auf mich einen zirkulären Eindruck...
Harzliche Grüße vom Berg
esst mehr http://www.harte-harzer.de
Tom
yo,
Wieso hat die id(7) in hid eine 5 stehen?
weil der datensatz 5 die erste ebene für diesen datensatz darstellt, datensatz 6 die zweite ebene und somit datensatz 7 die dritte ebene ist.
Ilja
Hello,
Wieso hat die id(7) in hid eine 5 stehen?
weil der datensatz 5 die erste ebene für diesen datensatz darstellt, datensatz 6 die zweite ebene und somit datensatz 7 die dritte ebene ist.
Dann ist aber 7 kein Kind von 6 sondern ein Enkel.
Oder hatte ich da was verkehrt verstanden?
Ich halte da bei fixiertem Root (also nicht mehr verschieblich) auch für günstiger, jeweils das Parent-Element und die Distanz zu Root anzugeben.
Harzliche Grüße vom Berg
esst mehr http://www.harte-harzer.de
Tom
echo $begrüßung;
DELETE FROM
_menueWHERE
id= 10
wie kann ich die Kinder gleich mitlöschen lassen?
Dafür gibt es für das DELETE-Statement die Multiple-table Syntax.
echo "$verabschiedung $name";
Moin!
DELETE FROM
_menueWHERE
id= 10
wie kann ich die Kinder gleich mitlöschen lassen?
Dafür gibt es für das DELETE-Statement die Multiple-table Syntax.
ich hab mir das durchgelesen, ich verstehe aber nicht ganz, wie ich das im Fall von https://forum.selfhtml.org/?t=113311&m=719077 anwenden muss
könntest du mir einen kleinen Denkanstoss verpassen? ;-)
Janine
echo $begrüßung;
könntest du mir einen kleinen Denkanstoss verpassen? ;-)
Mit deinen Erläuterungen sieht die Sache ganz anders aus, als ich sie mir vorstellte. Ich habe mir Iljas Tipp nicht ganz genau angesehen, doch seine Ideen/Lösungen sind fast immer die richtigen.
Ich würde dir auch noch eine andere Lösung für verschachtelte Daten zeigen wollen.
Solche Vaterzeiger-Hierarchien, wie du sie verwendest, sind dann schnell und einfach, wenn die Tabelle größtenteils im Ganzen gelesen wird. Braucht man Teilstücke, kommt man oft um rekursives Abfragen nicht herum, und das kostet.
Es gibt da noch das Nested Set-Modell. Das ist etwas aufwändiger zu pflegen, doch Löschanweisungen und andere Abfragen über einzelne Zweige lassen sich eleganter formulieren.
Mein Favorit zu dem Thema ist grad nicht erreichbar, vielleicht besinnt er sich aber noch irgendwann: http://www.develnet.org/36.html. Ansonsten scheint beim ersten Überschauen dieser Artikel auch recht hilfreich zu sein: http://www.databasejournal.com/news/article.php/3518261, und Google findet auch noch jede Menge.
echo "$verabschiedung $name";
Hello,
DELETE FROM
\_menue
WHEREid
= 10wie kann ich die Kinder gleich mitlöschen lassen?
Dafür gibt es für das DELETE-Statement die Multiple-table Syntax.
Das bezieht sich dann aber auf MySQL.
Jetzt kann außerdem wieder nicht entdecken, ab welcher Version das funktionieren soll
Harzliche Grüße vom Berg
esst mehr http://www.harte-harzer.de
Tom
Moin!
- wenn hid = uid ist soll er noch alle löschen, wo hid = 10 und uid = 10 ist
hier hat sich ein Fehler eingeschlichen
er muss dann alle hid = 10 löschen, wo uid nicht 0 ist
Janine
yo,
das datenbank-design ist meiner meinung nach etwas unglücklich gewählt. aber wenn dein schema richtig verstanden habe, dann hat jeder datensatz in hid und uid immer einen direkten bezug zur id. dies kann man sich zu nutze machen und somit wird die abfrage sehr einfach. bin mir aber nicht sicher, ob ich da nicht zu schnell "gedacht" habe. greifen wir mal das beispiel mit der id = 10 auf.
DELETE FROM _menue
WHERE id = 10
OR hid = 10
OR uid = 10
Ilja
Moin!
[Thema...]
Lass das den Papst oder den Meininger nicht hören... Der lässt doch glatt das Forum auf den Index setzen.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Hello,
kann man das alles in einer SQL-Anweisung schreiben, oder muss ich das mit PHP in 3 Anweisungen aufteilen?
Wenn Du das in mehrere Statements aufteilst, sollten die auf jeden fall gebunden werden.
Entweder durch ein Common oder wenn die DB das nicht kann, durch ein Lock der Tabellen.
Anderenfalls sind durch konkurrierende Prozesse Integrigtätsbrüche möglich.
Harzliche Grüße vom Berg
esst mehr http://www.harte-harzer.de
Tom