Vinzenz Mai: Sortiereihenfolge ändern -> Optimierung

Beitrag lesen

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