Soweit ich weiß, mysql GROUP BY Gruppen zum letzten Datensatz gefunden.GROUP BY geben Sie den ersten Datensatz
Gibt es eine Lösung für GROUP BY zum ersten Datensatz?
Ich habe den Befehl ORDER in SQL eingerichtet und ich brauche GROUP BY den ersten Datensatz und nicht den letzten zurückgeben.
EDIT
Hier ist die Abfrage
SELECT
DISTINCT(master.masterID),
langData.*,
master.*
FROM master_table as master
INNER JOIN lang_table as langData ON
langData.masterID=master.masterID
GROUP BY master.masterID
ORDER BY
CASE
WHEN langData.lang='currentLang' THEN 1 ELSE 999 END ,
master.name desc LIMIT 0,10
Die Abfrage oben wählen Sie die masterID
für mehrsprachige Tabelle und nehmen wir an FIRST die Datensätze in currentLang
und sie mit Namen, um zurückzukehren und dann alle anderen Sprachen.
Frag mich nicht, warum ich die Sprache nicht in JOIN einstelle. Dies ist der Weg, der getan werden muss.
Also alles funktioniert gut bis jetzt erwartet das Szenario, dass ich einen Datensatz mit den Sprachen en
und fr
habe. Wenn currentLang
en
ist dann basierend auf
langData.lang='currentLang' THEN 1 ELSE 999 END
die en
Auftrag ist 1 und fr
Auftrag ist 999 und statt den Wert von en
bekomme ich den Wert von fr
bekommen.
Deshalb möchte ich in die erste Reihe gruppieren.
Ich werde Sie nicht fragen, warum Sie nicht die Sprache, in der 'JOIN' gesetzt eher werde ich dir sagen, dass es auf diese Weise nicht funktionieren wird. Ein nicht aggregierter Ausdruck in 'GROUP BY' gibt einen beliebigen Datensatz aus jeder Gruppe zurück und soll nicht verwendet werden, wenn die Werte variieren. Sie können einen beliebigen Datensatz aus 'master_table' zurückgeben (sie sind alle in jeder Gruppe gleich), aber nicht aus' lang_table'. Es gibt keine Garantie, dass der Datensatz zurückgegeben wird, nada, niente. "BTW", warum hast du hier "DISTINCT", was ist der Zweck? – Quassnoi
Ich versuche zu erreichen "gebe mir zuerst alle Datensätze aus der aktuellen Sprache Reihenfolge nach Namen und dann für alle anderen Sprachen nach Namen sortieren" Bedeutung: wenn aktuelle lang ist EN dann alle Datensätze für EN und dann alle Datensätze für andere Sprachen. WENN in der lang-Tabelle für einen Datensatz hat EN, FR gibt den EN-Wert zurück. IF in lang-Tabelle EN ist nicht vorhanden return any lang – ntan
dies ist sehr einfach zu tun mit einem 'JOIN' wie hier beschrieben: http: // explainextended. com/2009/08/10/fallback-language-names-mysql/aber aus irgendeinem seltsamen Grund (über den du nicht einmal gefragt werden willst), willst du ihn nur ungern benutzen. – Quassnoi