Hallo Bobby,
Umsetzung: mit Stored Procedure.
Und da haperts.
CREATE PROCEDURE datenbank.position_up (IN param1 INT)
Wieviele Parameter hat mein Aufruf? Richtig: 2.
BEGIN
-- zwei völlig überflüssige SELECT-Anweisungen, weg damit. Du weißt doch, welche Datensätze Du vertauschen willst. Ja, Deine Applikation muss Dir genau die zwei ID-Werte liefern. Wenn sie's für einen Datensatz kann, dann auch für zwei.
SELECT * FROM menu a WHERE id=param1;
SELECT * FROM menu b WHERE b.orderzahl<a.orderzahl ORDER BY orderzahl DESC LIMIT 0,1;
SPs sind atomar. Du kannst ohne Probleme den maximalen Wert Deiner orderzahl-Spalte plus 1 statt eines hartcodierten Wertes nehmen und für die WHERE-Klausel nimmst Du die ID-Werte aus der Übergabe.
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;
END
> Dies wird mir mit folgendem Fehlercode quittiert: #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3
MySQL hat SPs erst spät eingebaut und möchte daher für seine "normalen" Anweisungen während der Abarbeitung des CREATE-Statements ein anderes Trennzeichen (Delimiter) für SQL-Anweisungen haben. Nimm den doppelten Slash.
Nimm dafür einen netten Client wie phpMyAdmin, der bietet Dir eine Eingabmöglichkeit für einen anderen Delimiter unterhalb der SQL-Textarea an.
Freundliche Grüße
Vinzenz