Problem mit SQL Abfrage!

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?

MfG

Hallo,

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]

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;

Geht es evtl. Ohne die Klammern ?

SELECT DISTINCT sub FROM hp WHERE menu=6 ORDER BY id;

Ansonsten:

http://www.mysql.com/doc/en/DISTINCT_optimisation.html

Alexander

P.S.: mySQL kann keine Views, das create view von der anderen Antwort geht nicht…

Hallo Alexander,

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]

DANKE DANKE DANKE,

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!

MfG
Sahkermaker

PS: DANKE

Hallo Alexander,

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?

Ja, SELECT min(spalte) as alias geht

Alexander