PHP MySQL Sortierung

callofsorrow

New Member
Tag zusammen,
ich brauch mal kurz eure Hilfe ;)

ich habe Datensätze die nacher der Spalte "orderby" numerisch sortiert werden, klappt auch alles ... aber wenn ich jetzt ber Drag und Drop ein Datensatz mithilfe von AJAX umsetzen möchte (ich übergebe id, die orderby am Anfang und am Zielpunkt) weiß ich nicht recht, wie ich diesen dann an dieser Stelle einfügen soll, damit dieser ordentlich eingereiht wird ...

Kann mir wer helfen ?

Für jede Hilfe dankbar ;)

mfg
 
Deine Beschreibung ist nicht wirklich verständlich. Wie wäre es mit Pseudocode oder Ähnlichem?
 
sowas hab ich mir schon gedacht :d danke für deine Antwort

hier sind meine Zeilen in der DB :
MOD: Bilder bitte immer als Anhang!

Ich möchte 6 zwischen 3 und 4 setzen, wie sortiere ich die Datensätze, die nach einer Spalte (orderby) geordnet werden, dann neu ?

Wenn der Datensatz optisch zwischen die beiden gesetzt wurde (mit jQuery) rufe ich ein Script mit Ajax auf
 

Attachments

  • 18_04_2013-705865-example.png
    18_04_2013-705865-example.png
    11.4 KB · Views: 131
Last edited by a moderator:
Indem du die Spalte orderby aller betroffen Elemente so anpasst, dass dein neu eingefügtes Element an der von dir gewünschten Stelle auftaucht.
 
Es gibt zwei möglich Ansätze für Positions-Sortierung:

1.) Die Positionen in 10er (oder 20er, 100er) Schritten vergeben.
So bleiben ausreichend viele Lücken in die weitere Datensätze eingefügt werden können.
In Deinem Beispiel könnte orderby die Werte 10, 20, 30, 50, ... haben. Der neue Datensatz wird dann mit einer 35 versehen.

2.) Laufende Updates. D.h. wenn ein Datensatz an der Stelle 4 eingefügt werden soll, braucht es ein Update aller Datensätze mit orderby>=4. Z.B.:
UPDATE tabelle SET orderby=orderby+1 WHERE orderby>=4;
Danach kann der INSERT mit einem orderby=4 erfolgen.

Beide Lösungen haben Ihre Vor- und Nachteile. Sowohl in der Handhabe als auch in der Algorithmierung.
Ich denke das Lösung 2 für Dich die einfacherer Variante ist.

huschi.
 
Das klappt soweit ganz gut, nur wenn ich einen Eintrag nach unten verschiebe, rutscht dieser eine Stelle zu hoch, hier mein Script was mit Ajax aufgerufen wird :

PHP:
$id = $_POST["id"];
$ende = $_POST["newpos"];
	
include "../inc/configuration.php";
	
$aUpdate = "	UPDATE test SET orderby=orderby+1 WHERE orderby >= ".$ende;
$Update= $db->sql_query($aUpdate);
	
$aUpdate = "		UPDATE 		test 
											SET 		
															orderby= '".$ende."'
											WHERE 		id= '".$id."' 
											";
$Update = $db->sql_query($aUpdate); 
				
			// Seiten sortieren		
			$aDaten = "SELECT * FROM test ORDER BY orderby ASC";
			$qDaten = $db->sql_query($aDaten);
			$iDatent = $db->sql_num_rows($qDaten);
			$i = 1; 
			while($Daten = $db->sql_fetch_object($qDaten)) 
			{ 
				$aUpdate = "	UPDATE test SET orderby='".$i."' WHERE id='".$Daten->id."' ";
				$Update= $db->sql_query($aUpdate); 
				$i++;
			}
 
Ich bin mir sicher, dass Du das Problem noch bewältigen wirst. Lass einfach mal den zweiten Schritt mit der Durchnummerierung weg. Dann sollte die Lösung in der DB ersichtlich sein.
Denn von hier aus ist es jetzt schwer nach zu vollziehen.

PS: Du solltest dringend die Parameter id und newpos auf Zahlen und ggf. auf Existenz und Zahlenraum prüfen. So wie es jetzt da steht, hast Du hier ein typisches Loch für SQL-Injections.

huschi.
 
habs nun gelöst :)

Ich hab nun noch ne Abfrage drin, ob von unten nach oben, oder andersherum geschoben wird, wenn von unten nach oben wird der neue Wert für orderby um 1 erhöht, andernfalls bleibt er gleich - funktioniert!

Danke an Huschi für die Hilfe!

mfg
 
Back
Top