Pour autant que je sache groupes mysql groupe par le dernier enregistrement trouvé.GROUP BY retourner le premier enregistrement
Existe-t-il une solution à GROUP BY le premier enregistrement?
J'ai configuré la commande ORDER dans SQL et j'ai besoin de GROUP BY retourner le premier enregistrement et pas le dernier.
EDIT
est ici de la requête
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
La requête sélectionner au-dessus du masterID
pour la table en plusieurs langues et supposons pour revenir d'abord les dossiers dans currentLang
et les commandez par nom, puis tous les autres langues.
Ne me demandez pas pourquoi je ne définis pas la langue dans JOIN. C'est la voie à suivre.
Donc tout fonctionne bien jusqu'à présent, attendez le scénario que j'ai un enregistrement avec les langues en
et fr
. Si currentLang
est en
alors basé sur
langData.lang='currentLang' THEN 1 ELSE 999 END
l'ordre en
est 1 et fr
ordre est 999 et au lieu d'obtenir la valeur de en
je reçois la valeur de fr
.
C'est pourquoi je veux regrouper à la première rangée.
Je ne vais pas vous demander pourquoi vous ne définissez pas la langue dans le 'JOIN' Je vais vous dire que ça ne marchera pas. Une expression non agrégée dans 'GROUP BY' renvoie un enregistrement arbitraire de chaque groupe et n'est pas supposée être utilisée si les valeurs varient. Vous pouvez retourner n'importe quel enregistrement de 'master_table' (ils seront tous les mêmes dans chaque groupe) mais pas de' lang_table'. Il n'y a aucune garantie sur quel enregistrement sera retourné, nada, niente. 'BTW', pourquoi avez-vous' DISTINCT' ici, quel est son but? – Quassnoi
J'essaye d'obtenir "donnez-moi d'abord tous les enregistrements de l'ordre de langue courant par nom et ensuite pour toutes les autres langues par nom" Signification: si lang actuel est EN alors obtenir tous les enregistrements pour EN puis obtenir tous les enregistrements pour d'autres langues. SI dans la table lang pour un enregistrement a EN, FR retourner la valeur EN.IF dans la table lang FR n'existe pas retourner tout autre lang – ntan
c'est très facile à faire avec un 'JOIN' comme décrit ici: http: // explainextended. com/2009/08/10/fallback-language-names-mysql/mais pour une raison étrange (que vous ne voulez même pas être demandé) vous êtes réticent à l'utiliser. – Quassnoi