mysql里面 limit的奇效

  项目里面有遇到一个需求,查询一个表,先group by ,再按group 的count(*)进行倒序,取出每个group里面发表时间最新的一个纪录,之前的同事SQL是这样写的

SELECT
    *
FROM
    (
        SELECT
            *
        FROM
            table
        WHERE
            id = ?
        AND status = ?
        ORDER BY
            created_time DESC
    ) AS a
GROUP BY
    a.group
ORDER BY
    count(*) DESC
LIMIT 10

  但是呢,最后取出来的数据是乱序的,也就是说该数据在所在的group里面不是发表时间最新的,很奇怪。最后呢,我给这条语句加了一个limit,如下

SELECT
    *
FROM
    (
        SELECT
            *
        FROM
            table
        WHERE
            id = ?
        AND status = ?
        ORDER BY
            created_time DESC
        LIMIT 10000
    ) AS a
GROUP BY
    a.group
ORDER BY
    count(*) DESC
LIMIT 10

  虽然说是limit 10000,但是整个表里面实际也就3000多数据,但是这样一来查出来的数据就是group里面最新的数据了。我在想mysql里面的limit是不是像java的volatile那样,具备代码优化保持变量相对位置不变的“奇效”

posted @ 2017-12-14 14:14  小小的平庸  阅读(170)  评论(0编辑  收藏  举报