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ß