Tabelle Sortieren

Napofis

require 'brain.php';
Hallo @ all,

ich scheitere gerade mal wieder an einer kleinen SQL UPDATE :(

Mein Ziel ist es mit einem UPDATE Befehl eine Tabelle zu Sortieren nach 2 Spalten -> `ordering` und `id` (ASC) und `ordering` soll von 1 bis n durchnummeriert sein.

Hier mal das Query mit dem ich Probiert habe das aber leider nicht Funktioniert.
Code:
SET @test= 1;
  UPDATE `tabelle` 
  SET `ordering`=++@test
  ORDER BY `ordering` ASC, `id` ASC

Ich wollte damit erreichen das jede Spalte durchlaufen wird, die Varibale @test mit zählt und ihren Wert dann der Spalte `ordering` zuweist.
Nur das Funktioniert leider nicht.

Man könnte das selbe auch über PHP machen indem man erst alle Einträge Sortiert abfrägt und dann in einer WHILE-schleife das UPDATE ausführt.
Allerdings ist diese Art und Weise bei 10.000 Einträgen und mehr sehr schlecht.

Kennt jemand eine gute Alternative oder kann meinen Fehler korrigieren?

Grus Napofis
 
Hallo @ all,

ich scheitere gerade mal wieder an einer kleinen SQL UPDATE :(

Mein Ziel ist es mit einem UPDATE Befehl eine Tabelle zu Sortieren nach 2 Spalten -> `ordering` und `id` (ASC) und `ordering` soll von 1 bis n durchnummeriert sein.

Hier mal das Query mit dem ich Probiert habe das aber leider nicht Funktioniert.
Code:
SET @test= 1;
  UPDATE `tabelle` 
  SET `ordering`=++@test
  ORDER BY `ordering` ASC, `id` ASC

Ich wollte damit erreichen das jede Spalte durchlaufen wird, die Varibale @test mit zählt und ihren Wert dann der Spalte `ordering` zuweist.
Nur das Funktioniert leider nicht.

Man könnte das selbe auch über PHP machen indem man erst alle Einträge Sortiert abfrägt und dann in einer WHILE-schleife das UPDATE ausführt.
Allerdings ist diese Art und Weise bei 10.000 Einträgen und mehr sehr schlecht.

Kennt jemand eine gute Alternative oder kann meinen Fehler korrigieren?

Grus Napofis

Hallo,

ich bin mir nicht sicher, was du eigentlich erreichen willst ? Die Datensätz in einer Tabelle sind prinzipiel "unsortiert", wenn du eine definierte Reihenfolge willst, so musst du deien Abfrage mit einer ORDER BY ergänzen


Gruss
 
Ich habe dass jetzt so verstanden, dass du direkt die Positionen der Datensätze in der Tabelle umschreiben willst... habe es zwar jetzt nicht getestet, aber vielleicht hilfts dir:

Code:
ALTER TABLE table_name ORDER BY column;
Wofür dann die Nummerierung gut sein soll, versteh ich jetzt nicht, aber du wirst schon deine Gründe haben ;-]

Es sei denn, ich hab das jetzt komplett falsch verstanden, dann nichts für ungut :rolleyes:
 
hier ist eine Beispiel Tabelle

Code:
id 	name 	ordering 	published
9 	Test 4 	3 	1
8 	AGBs 	2 	1
7 	Test 2 	1 	1
10 	Test 6 	5 	1
11 	Test 4 	4 	1
12 	Test 	8 	1
13 	Test 	7 	1
14 	Test 2 	6 	1

Der Benutzer soll die Einträge sortieren können, und diese Reihenfolge wird in der Spalte `ordering` gespeichert bei Unklarheiten wird nach ID sortiert.

Wenn ein User jetzt einen Eintrag(aus der mitte) löscht würde dies Sortierung nicht mehr richtig funktionieren.

Daher wird im Moment eine Fuktionen aufgerufen die die Lücken entfernt.
Der PHP Code sieht so aus.
PHP:
	function checkOrder() {
		$db =& JFactory::getDBO();
		$db->execute('SELECT `id` FROM `#__tabelle` ORDER BY `ordering` ASC, `id` ASC');
		$rows = $db->loadAssocList();
		$i=0;
		foreach ($rows as $row) {
			$db->execute('UPDATE `#__tabelle` SET `ordering`="'.++$i.'" WHERE `id`="'.$row['id'].'"');	
		}
	}

Der Funktioniert zwar ohne Probleme aber wenn es viele Einträge werden dauert die Funktion ewig, das kann auch zum crash führen.
Deswegen such ich nach einer Möglichkeit diese Funktion Serverschonend zu realisieren.
 
Der Funktioniert zwar ohne Probleme aber wenn es viele Einträge werden dauert die Funktion ewig, das kann auch zum crash führen.
Deswegen such ich nach einer Möglichkeit diese Funktion Serverschonend zu realisieren.

-Du bist dir aber bewusst, dass dies nicht "Transaktionssicher" ist, d.h. wenn mehrere User dies benutzen, du bald einmal eine "Datenchaos" bekommst ?


Gruss
 
Nur die die das ganze Verwalten dürfen auch diese Funktionen nutzen. Von daher sollte es keine Probleme geben, aber wie gesagt ich bin ja auf der suche nach einer besseren Lösung. :(
 
Hi,

Wenn ein User jetzt einen Eintrag(aus der mitte) löscht würde dies Sortierung nicht mehr richtig funktionieren.

wieso das denn nicht? Wenn Du aus der Reihe 1,2,3,4,5 die 3 rausnimmst, ist der Rest doch immer noch in der gewünschten Reihenfolge. Ein Problem bekommst Du erst, wenn jemand einen Datensatz "verschieben" will. Dazu hilft Dir vielleicht dieser Thread.

Ich frage mich allerdings, wer in 10000 Datensätzen Positionsnummern vergeben möchte...

LG
 
Das mit dem Verschieben Funktioniert schon alles, es soll halt nur sauber durchnummeriert sein. Und 10.000 ist vielleicht etwas hoch aber wenn man bedenkt das man noch Kategorien erstellen kann die bei der Sortierung auch berücksichtigt werden müssen, kann man schon mit 1000 Einträgen rechnen.
Ich setzt aber die Anforderung immer höher an, zu Sicherheit.

zB: bei einer Umfangreichen Galerie sind schnell 5000 Bilder und mehr in der Tabelle.
 
Zurück