Philipp Hasenfratz: reihenfolge der einträge in datenbank verändern.

Beitrag lesen

Halihallo Ron

habe folgendes problem, und finde einfach den fehler nicht.
ich habe artikel die auf einer seite ausgegeben werden.
die artikel befinden sich in der datenbank.
die artikel werden anhand der spalte 'sortnummer' sortiert.

Muss das sein? - Die Frage ist ernst gemeint: tu das nur, wenn es wirklich notwendig
ist!

jetzt soll man über den browser die reihenfolge der ausgabe verändern können.

Ich hoffe, dass du dies nur für den Admin brauchst, wenn Clienten dies ändern können
wird die ganze Geschichte höchst ineffizient.

--

Ich versuche es mit einem Beispiel:

artikel_id    sortnummer
    1             5
    2             7
    3             9
    4             11
    5             15

nun soll artikel_id=3 um eins nach _oben_ verschoben werden:

a) alle artikel_id kleiner _2_ (also 3-1)  bleiben dieselben
b) alle artikel_id grösser 3 gleiben dieselben
c) => nur 3 und 2 ändern sich, werden ausgetauscht.

OK, soweit hast du es, aber:

$sql_down = "SELECT sortnummer from $sys_pan_tbl WHERE sortnummer < '$sortnummer' LIMIT 1";

liefert dir _irgendeinen_ Datensatz, wo sortnummer < $sortnummer ist. Folglich fehlt hier
ein ORDER BY sortnummer DESC, sodass LIMIT 1 den grössten sortnummer Datensatz, wo
sortnummer<$sortnummer noch gilt zurückgibt (in meinem Beispiel also 2).

Dann ein zweiter Fehler:

  1. mysql_query("UPDATE $sys_pan_tbl SET sortnummer='$sortnummer' WHERE
       sortnummer='$sortnummer2'");
  2. mysql_query("UPDATE $sys_pan_tbl SET sortnummer='$sortnummer2' WHERE
       sortnummer='$sortnummer'");

In Query 1 änderst du sortnummer auf $sortnummer2, aber nach genau dieser selektierst
du im Query 2 und setzt es wieder auf $sortnummer... Das erinnert mich an das Problem
wie man die Werte zweier Variablen austauscht:

a=5
b=7

nun soll a=7 und b=5 sein. Wie löst du es?

a=b
b=a

? - Nein. Dann hast du in a sowie b 7 stehen und genau das hast du in deiner Datenbank
bemerkt. Bei dem letzten Beispiel verwendet man oft eine temporäre Variable:

a=5
b=7

c=a
a=b
b=c

so tauscht man die Variablen aus. Nun was ist diese temporäre Variable in deiner
Datenbank? - Ganz einfach: der Primary Key referenziert sie bereits...

Ich schätze mal du kommst jetzt selber darauf und sonst fragst du einfach nochmal :-)

Viele Grüsse

Philipp

--
RTFM! - Foren steigern das Aufkommen von Redundanz im Internet, danke für das lesen der Manuals.
Selbstbedienung! - Das SelfForum ist ein Gratis-Restaurant mit Selbstbedienung, Menüangebot steht in den </faq/> und dem </archiv/>.