【问题标题】:Weird Group/sort behavior in mysql 5.7mysql 5.7 中奇怪的组/排序行为
【发布时间】:2016-08-16 12:41:53
【问题描述】:

我不是数据库专家,我不明白为什么这个简单的案例在 5.6 上完美运行,但在 5.7 上却以奇怪的方式失败。

用例:获取排名靠前的漫画列表以及标题、作者等信息......

只要我只选择非文本列,那么它就可以正确排序

            SELECT c.id, c.title IF(AVG(r.score) IS NOT NULL, AVG(r.score), 0) as `rateScore`,  COUNT(r.`entityId`) as `rateCount`  
        FROM `manga_comic` as c
        LEFT JOIN `base_rate` as r
        ON( r.`entityType` = 'comic' AND c.id = r.`entityId` )


        GROUP BY c.`id`
        ORDER BY `rateScore` DESC, rateCount DESC

添加诸如“c.description”之类的文本列将忽略 rateScore 而重视 rateCount。

再一次,对我来说只有 5.7(或者可能是一些搞砸了的配置)。我希望不要因为升级到mysql 5.7而重新编码很多屏幕

【问题讨论】:

  • 被添加的文本列是否同时包含在 select 和 group by 中?
  • @e4c5 :这是一些“认真”的快速回复,看起来很有希望,谢谢
  • 我看不出添加c.description(我假设的选择子句)会对group byorder by 产生任何影响。它甚至不必添加到group by,因为它在功能上依赖于c.id。你能详细说明一下到底有什么不同吗? (我不理解您的解释“将忽略 rateScore 而重视 rateCount”。)您可以发布导致问题的更改查询吗?
  • 这会导致语法错误

标签: mysql group-by sql-order-by


【解决方案1】:

我明白了。感谢Is there ANY_VALUE capability for mysql 5.6?回答的提示

        SELECT DISTINCT c.id,
    c.author,
    c.title,
    ....... ,

    r.avgScore as `rateScore`,  r.`rateCount` ,

    f.id as mediaId , f.type as mediaType, f.data as cover

                FROM `manga_comic` as c
                LEFT JOIN (
                Select entityId,   AVG(r0.score) as `avgScore`,  COUNT(r0.`entityId`) as `rateCount` 
                FROM `base_rate` as r0

                Where  r0.`entityType` = 'comic'
                    GROUP BY r0.`entityType`  , r0.`entityId`
                ) r
                ON(  c.id = r.`entityId` )



                LEFT JOIN entity e on ( `c`.`id` = `e`.`entityId` and e.entityType='comic' and plugin='manga' )
                LEFT JOIN media_file f on ( `e`.`id` = `f`.`entityId` and f.type='cover')
                WHERE 1 


                ORDER BY `rateScore` DESC , rateCount DESC
                LIMIT 0, 20

感谢 e4c5 的链接和其他人的时间和支持。

结论:到目前为止,我在 mysql 5.7 中遇到了很多麻烦,所以在将你的 PROD 升级到 5.7 之前请三思而后行

【讨论】:

    猜你喜欢
    • 2011-03-13
    • 2012-12-17
    • 2011-03-06
    • 1970-01-01
    • 2012-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-17
    相关资源
    最近更新 更多