据我所知,mysql的GROUP BY是根据找到的最后一条记录进行分组的。
是否有办法按照第一条记录进行GROUP BY?
我已经在SQL命令中设置了ORDER,并且需要GROUP BY返回第一条记录而不是最后一条记录。
编辑:
以下是查询:
是否有办法按照第一条记录进行GROUP BY?
我已经在SQL命令中设置了ORDER,并且需要GROUP BY返回第一条记录而不是最后一条记录。
编辑:
以下是查询:
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
上述查询选择多语言表中的masterID
,并且应该首先返回currentLang
中的记录,并按名称排序,然后返回其他所有语言的记录。
别问我为什么不在JOIN中设置语言。这是正确的方法。
到目前为止,一切都运行良好,除非我有一个带有en
和fr
语言的记录。 如果currentLang
为en
,则基于
langData.lang='currentLang' THEN 1 ELSE 999 END
“en”订单为1,“fr”订单为999,但我得到的值是“fr”的值而不是“en”的值。因此,我想将其分组到第一行。
JOIN
中设置语言,相反我会告诉你这样做是行不通的。在GROUP BY
中未聚合的表达式将从每个组返回任意记录,并且如果值有所变化,则不应使用它。您可以从master_table
返回任何记录(它们在每个组内都是相同的),但不能从lang_table
返回。无法保证将返回哪个记录,没有任何保证。顺便问一下,你为什么在这里使用DISTINCT
,它的目的是什么? - QuassnoiJOIN
来完成:http://explainextended.com/2009/08/10/fallback-language-names-mysql/,但由于某些奇怪的原因(你甚至不想被问到),你不愿使用它。 - Quassnoi