(MYSQL) Bestimmten Feldwert an erste Stelle sortieren
MADU
- datenbank
0 Ich Idiot
MADU0 Henrico Hamstar0 MADU0 Henrico Hamstar0 MADU
0 dedlfix
0 Henrico Hamstar
Hallo,
Ich wende mich mit einer MySQL4.0-Frage an Euch.
Gegeben sei eine Tabelle "doc" mit einem Feld "name" vom Typ Varchar, "name" ist gleichzeitig der Primärschlüssel.
Ich selektiere die Werte mit dem Query "SELECT name FROM doc ORDER BY name".
Nun ist es möglich, daß ein Wert von "name" gleich "index" ist. Diesen Wert möchte ich jedenfalls an _erster Stelle_ im Resultat haben, die restlichen Werte sollen alphabetisch sortiert sein.
Meine Frage: Komme ich umhin, in der Tabelle ein neues Sortierfeld für diese Anforderung anzulegen?
Ich möchte nach Möglichkeit vermeiden, ein Feld namens "DuBistDerIndex" anzulegen, denn diese Information ist ja bereits aus dem Wert von "name" ersichtlich.
Wie löst man das elegant?
lg
MADU
Hallo,
Sorry, ich hätte nicht so vorschnell posten sollen.
Ich habe direkt nach dem Post eine Abfrage versucht, in die ich nicht allzuviel Hoffnung gesetzt hatte, die aber überraschenderweise das gewünschte Ergebnis bringt:
SELECT name FROM doc ORDER BY name='index' DESC, name
lg
MADU
SELECT name FROM doc ORDER BY name='index' DESC, name
SELECT
name
FROM
doc
ORDER BY
name='index' DESC,
name
LOL, das funktioniert?!
Was mit den "name"n nach "index"?
Hallo,
SELECT name FROM doc ORDER BY name='index' DESC, name
LOL, das funktioniert?!
Was mit den "name"n nach "index"?
Ja, es funktioniert - mich hatte das auch überrascht.
Die "name"n nach "index" werden alphabetisch sortiert, so wie ich es wollte. Ich denke, MySQL wertet den Ausdruck "name='index'" aus und errechnet dafür ein Ergebnis true oder false bzw. 1 oder 0. Und nach 1|0 läßt es sich trefflich sortieren.
lg
MADU
Die "name"n nach "index" werden alphabetisch sortiert, so wie ich es wollte. Ich denke, MySQL wertet den Ausdruck "name='index'" aus und errechnet dafür ein Ergebnis true oder false bzw. 1 oder 0. Und nach 1|0 läßt es sich trefflich sortieren.
Ich hatte eher in der WHERE-Klausel eine dementsprechende Bedingung erwartet, also ein "WHERE (name >= 'index')" (wenn zulaessig :).
Deine Annahme bzgl. der Auswertung des Ausdrucks schiëint mir unrichtig.
Du willst doch alle Namen, die "index" vorangehen und zwar sortiert, oder?
Hallo,
Du willst doch alle Namen, die "index" vorangehen und zwar sortiert, oder?
Nein.
Ich will alle Namen, alphabetisch sortiert.
Lediglich "index" soll aus alphabetischen Sortierung ausbrechen und _immer_ an erster Stelle erscheinen.
Also z.B.:
und nicht wie bei normaler alphabetischer Sortierung:
Und genau das funktioniert mit dem vorhin von mir genannten Query.
lg
MADU
echo $begrüßung;
SELECT name FROM doc ORDER BY name='index' DESC, name
LOL, das funktioniert?!
Was mit den "name"n nach "index"?
Ja, es funktioniert - mich hatte das auch überrascht.
Die "name"n nach "index" werden alphabetisch sortiert, so wie ich es wollte. Ich denke, MySQL wertet den Ausdruck "name='index'" aus und errechnet dafür ein Ergebnis true oder false bzw. 1 oder 0. Und nach 1|0 läßt es sich trefflich sortieren.
Was man möglicherweise leicht übersehen kann, und was du auch nicht weiter erwähnt hast, ist die zweite Sortierbedingung »name«, die der ersten mit dem Vergleich folgt. Diese ist für die alphabetische Ordnung der restlichen Namen zuständig.
echo "$verabschiedung $name";
Wie löst man das elegant?
Mit einem SELECT, in dem ein weiteres SELECT mittels UNION-Operator so zu sagen eingebettet ist, z.B.:
SELECT
DF1,
DF2
FROM
DT1
WHERE
(DF1 = "DF1_Value")
UNION SELECT
DF1,
DF2
FROM
DT1
WHERE
(DF1 <> "DF1_Value")
ORDER BY
DF1 ASC
Vorsicht, Anfuehrungszeichen bitte ggf. durch Hochkomata ersetzen.