Ich hab ein Problem mit einer SQL Abfrage, oder vielmehr ich weiss nicht warum sie nicht so funktioniert wie ich mir das vorstelle (mySQL: 3.23.51):
SELECT DISTINCT(sub) FROM hp WHERE menu=6 ORDER BY id;
gibt zwar DISTINCT sub aus aber nicht in der Reihenfolge der id’s!
Auch die Alternative:
SELECT DISTINCT(sub),id FROM hp WHERE menu=6 GROUP BY id ORDER BY id;
funktioniert nicht wirklich, die ids werden nicht zusammengefasst! Nun die Frage: Gibt es die Möglichkeit in mySQL eine DISTINCT abfrage nach einer andere Spalte zu sortieren, und wenn ja wie?
ich kenne zwar MySQL nicht, aber wenn du nach einer Spalte sortieren willst, muß diese auch eindeutig auswertbar sein. Deshalb stell dir zunächst die Frage welche ID willst du für die Auswertung nutzen.
Beispiele, wie sie in anderen SQL-Dialekten möglich wären sind:
SELECT DISTINCT(sub),max(id) as mid FROM hp WHERE menu=6 ORDER BY mid;
SELECT DISTINCT(sub),min(id) as mid FROM hp WHERE menu=6 ORDER BY mid;
SELECT DISTINCT(sub),list(id) as mid FROM hp WHERE menu=6 ORDER BY mid;
Ich persönlich würde allerdings die GROUP BY-Form bevorzugen:
SELECT sub,max(id) as mid FROM hp WHERE menu=6 GROUP BY sub ORDER BY mid;
SELECT sub,min(id) as mid FROM hp WHERE menu=6 GROUP BY sub ORDER BY mid;
SELECT sub,list(id) as mid FROM hp WHERE menu=6 GROUP BY sub ORDER BY mid;
Unterstütz MySQL kein Order By auf Alias, bietetr sich der Zwischenschritt einer View an:
CREATE VIEW v_sub AS
SELECT sub,min(id) as mid FROM hp WHERE menu=6 GROUP BY sub;
SELECT sub, mid FROM v_sub ORDER by mid;
Gruss
Uwe
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
wie macht MySQL ein ORDER BY, wenn die ID nicht eindeutig ist (?) ohne ID doppelt aufzulisten (- ursprüngl. Fragestellung -).
Kennt MySQL denn einen ALIAS auf eine Funktion wie min oder max?
Gruss
Uwe
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
SELECT sub,min(id) as mid FROM hp WHERE menu=6 GROUP BY sub ORDER BY mid;
damit hats geklappt! Ich wollte mySQL schon verbannen! Aber jetzt funktioniert es endlich wie es soll! Tausend dank!
wie macht MySQL ein ORDER BY, wenn die ID nicht eindeutig ist
(?) ohne ID doppelt aufzulisten (- ursprüngl. Fragestellung
-).
MySQL wandelt intern ein DISTINCT automatisch in ein GROUP BY um. DISTINCT(spalte) finde ich in der Doku nicht, habe ich auch noch nie verwendet, SELECT DISTINCT spalte sollte aber gehen.
Kennt MySQL denn einen ALIAS auf eine Funktion wie min oder
max?