Order By
undso
- datenbank
Hallo Forum,
ich habe eine Query mit der Bedingung am Ende:
where B.id="+meineID+" OR B.id="+freundID+"
meineID= 850
freundID= 870
Gibt also nur zwei Ergebnise/Datensätze. Kann man das nun so sortieren, dass er erst meinID und dann nach freundID sortiert?
Er sortiert das gerade immer nach der ID, obwohl ich nichts angegeben habe.
Grüßchen
Du kommst mit zwei Abfragen, die per UNION-Operator verbunden werden, also z.B.:
SELECT
DF_1,
DF_2
FROM
DT_1
ORDER BY
DF_1
UNION SELECT
DF_1,
DF_2
FROM
DT_1
WHERE
(DF_1 = 2)
(Wobei wir noch nicht alles verstanden haben, poste doch mal die ganze Query.)
Hallöle,
hier die komplette Query:
select A.id, A.name, A.text, A.stark, A.schwach, A.partner1, A.partner2, B.username from pre_sternzeichen AS A INNER JOIN pre_user AS B ON A.id=B.sternzeichen where B.id="+meinID+" OR B.id="freundID+" ;
Grüßchen
yo,
Gibt also nur zwei Ergebnise/Datensätze. Kann man das nun so sortieren, dass er erst meinID und dann nach freundID sortiert?
ja das kann man. es gibt dafür iner aller regel zwei möglichkeiten. entweder du hast innerhalb der daten ein kriterium zum sortieren. das ist der normalfall. in deinem falle hast du aber die gleiche spalte und auch nicht vorhersehbare inhalte. die sortierung ergibt sich bei dir also nur durch die programmlogik, nicht durch die datenhaltung. deshalb muss man ein wenig tricksen. eine möglichkeit wäre, eine pseudospalte zu erzeugen, entweder mir der if funktion oder der UNION klausel, wobei die if funktion oder eine andere flusssteuerung von deinem verwendeteten dbms abhängt. ich gehe mal von mysql aus.
SELECT spalte1, spalte2.... IF(id = "+meineID+", 1, 0) AS Sortierung
FROM tabelle
where B.id="+meineID+" OR B.id="+freundID+"
ORDER BY Sortierung
oder aber
SELECT spalte1, spalte2, 1 AS Sortierung
FROM tabelle
where id="+meineID+"
UNION ALL
SELECT spalte1, spalte2, 0 AS Sortierung
FROM tabelle
where id="+freundID+"
ORDER BY Sortierung
Er sortiert das gerade immer nach der ID, obwohl ich nichts angegeben habe.
das ist zufall, wie das dbms sortiert, wenn du keine angaben machst.
Ilja
Hallo Ilja,
danke für die schnelle Antwort, habe diese Stelle leider nicht kapiert? 1, 0 ... ?
IF(id = "+meineID+", 1, 0) AS Sortierung
Für würde das konkret in meinem Beispiel aussehen?
Grüße
yo,
Für würde das konkret in meinem Beispiel aussehen?
select A.id, A.name, A.text, A.stark, A.schwach, A.partner1, A.partner2, B.username, IF(B.id = "+meineID+", 1, 0) AS Sortierung
from pre_sternzeichen AS A
INNER JOIN pre_user AS B ON A.id=B.sternzeichen
where B.id="+meinID+" OR B.id="freundID+"
ORDER BY Sortierung
;
Ilja
oh dankeschön,
werde ich gleich mal probieren, da wäre ich nie und nimmer draufgekommen. danke für deine bemühungen.
grüße
yo,
du müsstest noch ein DESC beim ORDER BY anfügen oder die Zahlen in der IF klausel umdrehen, also erst die 0 dann die 1. Dann sollte auch richtig sortiert werden. der teufel steckt wie immer im detail....
Ilja