Moin
Ich hab eine Tabelle mit Werten, die ID, Name und Orderzahl beinhaltet. ID und Orderzahl sind unique.
Ich möchte nun einzelnen Punkte nach oben und unten verschieben.
ungefähr so (h steht für Link nach oben und r für Link eine Position nach unten):
h r Name1
h r Name2
h r Name3
h r Name4
Wenn ich jetzt den Link 1 Position hoch betätige z.B. beim Wert Name3 soll das Ergebnis dann folgendermaßen aussehen:
h r Name1
h r Name3
h r Name2
h r Name4
In der Tabelle wurden die Werte der Orderzahl getauscht. Im Moment geschiehht dies durch mehrere Querys. Können diese irgendwie auf ein Query zusammen gefasst werden?
// zu tauschendes Element holen
$menufac->getPointById($_GET['id']);
$menu=$menufac->getElement();
// Nebenstehendes Element holen
$menufac->getPointSelfNested($menu->ordering,$_GET['mode']);
// Wenn nebenstehendes Element vorhanden ist
if($menu2=$menufac->getElement())
{
// OrderID des nebenstehenden Elementes auf 99999999999 setzen
$menufac->update("orderzahl='99999999999'","id",$menu2->id);
// OrderID des zu verschiebenden Elementes mit dem des nebenstehenden Elementes tauschen
$menufac->update("orderzahl='".$menu2->orderzahl."'","id",$menu->id);
// OrderID des nebenstehenden Elementes mit dem zu verschiebenden Elementes tauschen
$menufac->update("orderzahl='".$menu->orderzahl."'","id",$menu2->id);
}
Da ich viel über Objekte gehe, hoffe ich das ihr damit was anfangen könnt. Also, jedes "$menufac->update" erzeugt einen neuen Query.
Das Beispiel führt folgende Querys nacheinander aus (mit dem Beispiel von oben)
SELECT * FROM menu a WHERE id='3'
SELECT * FROM menu b WHERE orderzahl <'3' ORDER BY orderzahl DESC LIMIT 0,1
UPDATE menu SET orderzahl='99999999999' WHERE id=b.id
UPDATE menu SET orderzahl=b.orderzahl WHERE id=a.id
UPDATE menu SET orderzahl=a.orderzahl WHERE id=b.id
Ich setze zuerst die Orderzahl des nebenstehenden Elementes auf einen extrem hohen Wert und tausche dann die beiden Orderwerte des jeweiligen Datensatzes. Ich muss so vorgehen, da die Spalte orderzahl ja unique ist.
Das Element mit der ID 3 hat nun den Wert 2 als Orderzahl und das Elmenent ID 2 hat den Wert 3 als Orderzahl.
Also, wie kann ich dies optimieren.
Gruß Bobby
-> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
### Henry L. Mencken ###
-> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
## Viktor Frankl ###
ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)