【发布时间】:2017-05-07 20:23:32
【问题描述】:
据我所知mysql 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,我没有得到 en 的值,而是得到了 fr 的值。
这就是我想分组到第一行的原因。
【问题讨论】:
-
我不会问你为什么不在
JOIN中设置语言,而是告诉你,这样是行不通的。GROUP BY中的未聚合表达式从每个组返回任意记录,如果值不同,则不应使用。您可以从master_table返回任何记录(它们在每个组中都是相同的),但不能从lang_table返回。无法保证将返回哪个记录,nada,niente。BTW,为什么这里有DISTINCT,它的目的是什么? -
我正在尝试实现“首先按名称顺序给我当前语言的所有记录,然后按名称顺序给所有其他语言的所有记录”含义:如果当前语言为 EN,则获取 EN 的所有记录,然后获取其他语言的所有记录。如果语言表中的一条记录有EN,FR返回EN值。如果语言表EN不存在返回任何其他语言
-
使用
JOIN很容易做到这一点,如下所述:explainextended.com/2009/08/10/fallback-language-names-mysql 但出于某些奇怪的原因(您甚至不想被要求),您不愿意使用它.