Spezielle Order-Reihenfolge

Spezielle Order-Reihenfolge

am 07.01.2006 10:16:02 von Peter Stoss

Hallo,

ich muss eine Tabelle abfragen und speziell sortieren.

In der Tabelle sind drin:
ABBB
ACCC
W111
W222

Ich brauche aber die Ws zuerst, es soll rauskommen
W111
W222
ABBB
ACCC

Geht das ohne den Output erst nochmal in PHP irgendwie sortieren zu
müssen?
Danke! Peter.

Re: Spezielle Order-Reihenfolge

am 07.01.2006 11:06:08 von Johannes Vogel

Hi Peter

Peter Stoss wrote:
> ich muss eine Tabelle abfragen und speziell sortieren.
> In der Tabelle sind drin:
> ABBB
> ACCC
> W111
> W222
> Ich brauche aber die Ws zuerst, es soll rauskommen
> W111
> W222
> ABBB
> ACCC
> Geht das ohne den Output erst nochmal in PHP irgendwie sortieren zu
> müssen?

Weshalb die W's? Willst du die erste Spalte einfach in umgekehrter
Reihenfolge oder willst du explizit die W's an den Anfang stellen?

Ersteres könntest du bspw. durch
.... order by left(field,1) desc, field asc ...
erreichen.

Zweites könntest du durch
.... order by replace(left(field,1), 'W','_'), field asc ...
erreichen.

HTH; Johannes

Re: Spezielle Order-Reihenfolge

am 07.01.2006 11:08:05 von Andreas Kretschmer

Andreas
--
Diese Message wurde erstellt mit freundlicher Unterstützung eines freilau-
fenden Pinguins aus artgerechter Freilandhaltung. Er ist garantiert frei
von Micro$oft'schen Viren. (#97922 http://counter.li.org) GPG 7F4584DA
Was, Sie wissen nicht, wo Kaufbach ist? Hier: N 51.05082°, E 13.56889° ;-)

Re: Spezielle Order-Reihenfolge

am 07.01.2006 11:13:00 von dnoeth

Peter Stoss wrote:

> ich muss eine Tabelle abfragen und speziell sortieren.
>
> In der Tabelle sind drin:
> ABBB
> ACCC
> W111
> W222
>
> Ich brauche aber die Ws zuerst, es soll rauskommen
> W111
> W222
> ABBB
> ACCC

Nimm Standard SQL:
ORDER BY
CASE WHEN col LIKE 'W' THEN 0 ELSE 1 END,
col

Dieter

Re: Spezielle Order-Reihenfolge

am 07.01.2006 11:23:49 von Andreas Kretschmer

Andreas
--
Diese Message wurde erstellt mit freundlicher Unterstützung eines freilau-
fenden Pinguins aus artgerechter Freilandhaltung. Er ist garantiert frei
von Micro$oft'schen Viren. (#97922 http://counter.li.org) GPG 7F4584DA
Was, Sie wissen nicht, wo Kaufbach ist? Hier: N 51.05082°, E 13.56889° ;-)

Re: Spezielle Order-Reihenfolge

am 07.01.2006 11:32:26 von dnoeth

Andreas Kretschmer wrote:

>>Nimm Standard SQL:
>>ORDER BY
>> CASE WHEN col LIKE 'W' THEN 0 ELSE 1 END,
>> col
>
>
> Schön.

Funktioniert aber nicht ;-)

> Besser vielleicht aber
>
> select * from foo ORDER BY CASE WHEN x ~ '^W' THEN 0 ELSE 1 END, x;
>
> um auf den Anfang der Spalte zu testen.

Ist aber kein Standard SQL, fehlte nur ein %:

LIKE 'W%'

Dieter

Re: Spezielle Order-Reihenfolge

am 07.01.2006 11:42:32 von Andreas Kretschmer

Andreas
--
Diese Message wurde erstellt mit freundlicher Unterstützung eines freilau-
fenden Pinguins aus artgerechter Freilandhaltung. Er ist garantiert frei
von Micro$oft'schen Viren. (#97922 http://counter.li.org) GPG 7F4584DA
Was, Sie wissen nicht, wo Kaufbach ist? Hier: N 51.05082°, E 13.56889° ;-)

Re: Spezielle Order-Reihenfolge

am 09.01.2006 09:56:31 von Dominik Echterbruch

Andreas Kretschmer wrote:
> begin Dieter Noeth wrote:
>
>>>select * from foo ORDER BY CASE WHEN x ~ '^W' THEN 0 ELSE 1 END, x;
>>>
>>>um auf den Anfang der Spalte zu testen.
>
>
>>Ist aber kein Standard SQL, fehlte nur ein %:
>
>
>>LIKE 'W%'
>
>
> Stymmt latürnich, ich verwende halt ganz gern den ~ - Operator von PG,

Und schmeißt damit für jede Zeile die (vergleichsweise) nicht gerade
performante RegExp Engine an. Dann doch lieber ein LIKE und ein kleiner
Index :)


Grüße,
Dominik
--
MonstersGame - Die Schlacht zwischen Vampiren und Werwölfen
http://spielwelt6.monstersgame.net/?ac=vid&vid=3018786