PHP/MySQL sortierung

sourceCode

Grünschnabel
Hallo zusammen,
ich verzweifele jetzt schon seit einiger Zeit an meiner Sortierfunktion mit PHP und MySQL, das auslesen ist natürich garkein Problem:
PHP:
$sql = "SELECT * FROM link ORDER BY sort ASC;";
aber das verändern einer Eintrags macht mir Probleme.

http://img225.imageshack.us/img225/8153/zomgsc5.png

Ich möchte jetzt wenn man z.B. seite.php?mode=up&id=1 aufruft die Zeile mit der ID 1 bei sort die Zahl 2 bekommt und die Zeile in der vorher 2 Stand zu 1 wird.

Ich habe es versucht:
PHP:
		$id = $getid;
		$do = 'plus';
		
		$sql = "SELECT * FROM `link` WHERE `id` = '$id' LIMIT 1;"; // DB Abfrage
		mysql_query($sql) OR die(mysql_error());
		
		$sort = $row->sort;
		
		if($do == "plus") {
			$newsort = $sort+1;
		}
		elseif($do == "minus") {
			$newsort = $sort-1;
		}
		
		$sql = "SELECT * FROM `link` WHERE `sort` = '$newsort' LIMIT 1;"; // DB Abfrage (des elements, das die neue sortierung hat und damit geänder werden muss)
		mysql_query($sql) OR die(mysql_error());
		
		$oldid = $row->id;
		
		$sql = "UPDATE `link` SET `sort` = '$sort' WHERE `id` = '$oldid' LIMIT 1;"; // altes Element die alte Sortierung geben
		mysql_query($sql) OR die(mysql_error());
		
		$sql = "UPDATE `link` SET `sort` = '$newsort' WHERE `id` = '$id' LIMIT 1;"; // neues Element die neue Sortierung geben
		mysql_query($sql) OR die(mysql_error());

Aber das funktioniert nicht. :(

Grüße, sourceCode
 
Das ist unsin die Daten in der Datenbank in der Reihenfolge umzuschreiben.
Beschäftige dich lieber mit dem Kaptiel Normalisieren von Datenbanken.

Mfg Splasch
 
Ich habe es jetzt ein bisschen anders gelöst. Ich weiß das es völliger schmarn ist, aber es funktioniert :p

PHP:
		$sql = "SELECT * FROM `link` WHERE `id` = '$getid';"; // DB Abfrage
		$qry = mysql_query($sql) OR die(mysql_error());
		$arrmoep = mysql_fetch_array($qry);
		
		$alteposi = $arrmoep['sort'];
		$neueposi = $arrmoep['sort']-1;
	
		$now = time();
		
		$sql1 = "UPDATE `link` SET `moved` = '" . $now . "', `sort` = '" . $neueposi . "' WHERE `ID` = '" . $getid . "';";
		mysql_query($sql1) OR die(mysql_error());
		
		
		$sql2 = "UPDATE `link` SET `sort` = '" . $alteposi . "' WHERE `moved` != '" . $now . "' AND `sort` = '" . $neueposi . "';";
		mysql_query($sql2) OR die(mysql_error());
Dazu ist noch eine neue DB spalte 'moved' nötig.

Grüße, sourceCode
 
Zurück