mysql中group by_mysql中GROUP BY 和ORDER BY 组合使用注意事项

更新时间:2019-05-09    来源:php安装    手机版     字体:

【www.bbyears.com--php安装】

例子

ID  uid  content  weid      addtime 
1  2  3213123  12  …..     
2  3  3213123  12  …. 
3  2  321312  12  … 
3  1  xxx  12  3232 

我们的需求是从消息表中掉出来最近的用户,刚开始的时候用的是这样写的

 代码如下


SELECT f . *
FROM  `enet_wechat_message` AS m
LEFT JOIN  `enet_wechatfans` AS f ON m.fakeid = f.openid
AND m.weid =135
AND f.weid =135
WHERE f.fakeid IS NOT NULL
GROUP BY m.fakeid
ORDER BY m.id DESC
LIMIT 10


但是这些写完之后发现不是我想要的结果,通过查资料发现MYSQL的执行顺序是

 代码如下

from… where…group by… having…. select … order by… 

这样我最后的ORDER BY 是在GROUP BUY 之后才进行的排序所以数据不是我想要的

采用如下方法可以解决

 代码如下


SELECT *
FROM (

SELECT *
FROM  `enet_wechat_message`
WHERE weid =135
ORDER BY  `id` DESC
) `temp`  www.111cn.net
GROUP BY fakeid
ORDER BY  `id` DESC


LIMIT 10使用子查询,先对结果集进行排序,然后在进行分组,这样就可以实现我需要最新的几个用户了。当然这个代码的业务逻辑还需要用户的个人信息,所以我最终的代码是如下的

 代码如下


SELECT f . *
FROM (

SELECT *
FROM (

SELECT *
FROM  `enet_wechat_message`
WHERE weid =135
ORDER BY  `id` DESC
) `temp`
GROUP BY fakeid
ORDER BY  `id` DESC
LIMIT 10 www.111cn.net
) AS m
LEFT JOIN  `enet_wechatfans` AS f ON m.fakeid = f.openid
WHERE f.fakeid IS NOT NULL
GROUP BY m.fakeid
ORDER BY m.id DESC

本文来源:http://www.bbyears.com/jiaocheng/50237.html

热门标签

更多>>

本类排行