Jörch: DB-Einträge mit Sortierreihenfolge bewegen ?

Beitrag lesen

Hallo, ich hab da mal ne Frage und zwar, kann man auf elegante Art und Weise Einträge in einer Spalte (MySQL-DB) mit einer Sortierreihenfolge versehen und diese Positionen dann verschieben ?

Konkretes Beispiel :

Eintrag | Sortierung
--------------------
Bla     | 4
Blubb   | 3
Fupp    | 2
Foo     | 5
Bar     | 1
Dings   | 6

dann gibt mir
SELECT Eintrag FROM tabelle ORDER BY Sortierung
aus : Bar, Fupp, Blubb, Bla, Foo, Dings

Jetzt möchte ich mit einer dazugehörigen UI, mit Links und Pfeilen die Einträge hoch- und runterschieben können (<a href="bla.php?eintrag='.$eintrag.'&move='.$_up_oder_down.'">)

Ich habe da schonmal einen Protoypen gebaut mit Dreieckstausch, der aber sehr schwerfällig ist, viel Code und vor allem viele UPDATE-Statements enthält. Ich poste ihn mal nicht, weil ich denke , mein Ansatz geht in die falsche Richtung und schränkt die Kreativität ein ;-)

oder ok, ein Stückchen daraus :

...

$domains = array();

$position = 0;

while( $row = mysql_fetch_assoc( $result_getDomainPositions ) ){

$domains[$position] = $row['webcode_id'];

if ( $row['webcode_id'] == $_GET['webcode_id'] ){
                $current_position = $position;
            }
            $position++;

}

switch ( $_GET['move'] ) {

case 'up':

$element_before = $domains[$current_position - 1];
                $element_current = $domains[$current_position];
                $domains[$current_position - 1] = $element_current;
                $domains[$current_position] = $element_before;

$sql1 = "UPDATE webcodes SET sort='".( $current_position - 1 )."' WHERE webcodes.id='".$element_current."';";
                $sql2 = "UPDATE webcodes SET sort='".$current_position."' WHERE webcodes.id='".$element_before."';";

break;

case 'down':

$element_after = $domains[$current_position + 1];
                $element_current = $domains[$current_position];
                $domains[$current_position + 1] = $element_current;
                $domains[$current_position] = $element_after;

$sql1 = "UPDATE webcodes SET sort='".( $current_position + 1 )."' WHERE webcodes.id='".$element_current."';";
                $sql2 = "UPDATE webcodes SET sort='".$current_position."' WHERE webcodes.id='".$element_after."';";

break;

default:
            break;
        }

$result_setDomainPositions1 = Util::dbQuery( $sql1 );
        $result_setDomainPositions2 = Util::dbQuery( $sql2 );

Also, falls jemand einen Tipp hat, wie man so etwas eleganter lösen kann, wäre ich sehr dankbar, das Problem dürft nicht so selten sein, oder ?

Danke schonmal und Gruß