Reihenfolge: Sortieren mit einem SQL-Befehl

Reihenfolge: Sortieren mit einem SQL-Befehl

am 09.10.2006 13:03:45 von Martin Schneider

Hallo!

Wie in einem früheren Post beschrieben habe ich eine Tabelle mit
Einträgen, die über ein Feld "reihenfolge" sortiert werden, damit der
Benutzer die Reihenfolge frei wählen kann. Im Grunde also:

name TINYTEXT,
reihenfolge INT

Zur Anzeige dann:
SELECT name FROM table ORDER BY reihenfolge;


Nehmen wir an, der Benutzer hat die Einträge schön frei geordnet, findet
dies nun aber doof und möchte nun alle Einträge wieder alphabetisch
sortieren, um darauf basierend wieder eine eigene Reihenfolge zu erstellen.

Kann ich dies mit einem einzigen SQL-Befehl hinbekommen?

Ich kann natürlich die ganze Tabelle mittels SELECT * FROM table ORDER
BY name einlesen und danach jeden einzelnen Datensatz mittels UPDATE den
entsprechenden Wert für reihenfolge zuweisen, das erscheint mir aber
wenig elegant.

Viele Grüße

Martin

Re: Reihenfolge: Sortieren mit einem SQL-Befehl

am 09.10.2006 13:28:32 von Axel Schwenke

Martin Schneider wrote:
>
> Wie in einem früheren Post beschrieben habe ich eine Tabelle mit
> Einträgen, die über ein Feld "reihenfolge" sortiert werden, damit der
> Benutzer die Reihenfolge frei wählen kann. Im Grunde also:
>
> name TINYTEXT,

Blödsinn. Du willst kein TINYTEXT sondern VARCHAR(255).

> reihenfolge INT
>
> Zur Anzeige dann:
> SELECT name FROM table ORDER BY reihenfolge;
>
>
> Nehmen wir an, der Benutzer hat die Einträge schön frei geordnet, findet
> dies nun aber doof und möchte nun alle Einträge wieder alphabetisch
> sortieren, um darauf basierend wieder eine eigene Reihenfolge zu erstellen.
>
> Kann ich dies mit einem einzigen SQL-Befehl hinbekommen?

Ja. Stichworte: User-Variablen und UPDATE ... ORDER BY.
Ein Beispiel (keine Lösung, du sollst ja was lernen):

CREATE TABLE t1 (c1 INT, c2 CHAR(3));
INSERT INTO t1 VALUES (1,'foo'), (2,'bar'), (3,'baz')

SET @x:= 0;
SELECT @x:= @x+1 AS lfdnr, c1, c2 FROM t1 ORDER BY c2;


XL

Re: Reihenfolge: Sortieren mit einem SQL-Befehl

am 09.10.2006 19:20:30 von Martin Schneider

> Martin Schneider wrote:
>> Wie in einem früheren Post beschrieben habe ich eine Tabelle mit
>> Einträgen, die über ein Feld "reihenfolge" sortiert werden, damit der
>> Benutzer die Reihenfolge frei wählen kann. Im Grunde also:
>>
>> name TINYTEXT,
>
> Blödsinn. Du willst kein TINYTEXT sondern VARCHAR(255).
Okay, danke für den Tipp.

>> reihenfolge INT
>>
>> Zur Anzeige dann:
>> SELECT name FROM table ORDER BY reihenfolge;
>>
>>
>> Nehmen wir an, der Benutzer hat die Einträge schön frei geordnet, findet
>> dies nun aber doof und möchte nun alle Einträge wieder alphabetisch
>> sortieren, um darauf basierend wieder eine eigene Reihenfolge zu erstellen.
>>
>> Kann ich dies mit einem einzigen SQL-Befehl hinbekommen?
>
> Ja. Stichworte: User-Variablen und UPDATE ... ORDER BY.
> Ein Beispiel (keine Lösung, du sollst ja was lernen):
>
> CREATE TABLE t1 (c1 INT, c2 CHAR(3));
> INSERT INTO t1 VALUES (1,'foo'), (2,'bar'), (3,'baz')
>
> SET @x:= 0;
> SELECT @x:= @x+1 AS lfdnr, c1, c2 FROM t1 ORDER BY c2;
Sehr schön. Danke!!

Viele Grüße

Martin