SELECT
USER.uid,
USER.email,
USER.mo,
USER.ret_over,
USER.ret_lock,
USER.ret_over + USER.ret_lock AS total,
user_login.createdip,
user_login.area
FROM
USER LEFT JOIN user_login ON USER.uid = user_login.uid
GROUP BY
uid
ORDER BY
total desc,user_login.id desc#排序的两个表的不同字段
LIMIT 10
total是对的,但是user_login.id 还是顺序的排序,有毒,求救
total,user_login.id desc试过这样也是不对的
优先按照第一个排序字段排序,当第一个字段相同时,按照第二个字段排序,没毛病,就是这样的。
第一个字段的排序是没错的,但是第二个字段还是顺序的排序
先排total,再排user_login.id这两个字段是不影响的,实际结果第二个没有按照desc排
@打我队友: 你把建表语句和insert语句给我发过来,我试试
@会长: CREATE TABLE user
(
uid
int(11),
email
char(60),
mo
char(11),
ret_over
char(15),
ret_lock
char(15))
CREATE TABLE user_login
(
id
int(11) ,
uid
int(11) ,
created
int(11) ,
createdip
char(15) ,
area
varchar(255) )
inseruser
t(uid,email,mo)VALUES(123,123,123)
inseruser_login
t(id,uid,created,createdip,area)VALUES(1,123,123,123154,,132.12313.12,'fasdfaf')
@打我队友: total 不是一个字段?建表语句里怎么没有
@会长: 是别名 over+lock的别名
@打我队友: 结果肯定没错,可能是你对排序的理解错了。就是根据第一个字段排序,当第一个字段的数据一样时才根据第一个字段排
@会长: 那么我要把另外一个表的字段进行排序,怎么写,求教
ORDER BY
total desc,user_login.id desc#排序的两个表的不同字段
根据两个字段排序,只有第一个字段的数据相同的列,才会按照第二条件进行排序的
并且,我看了你的语句,建表语句都没有ret_over 、 ret_lock这两个字段
我创建了一个表,和查询语句,是可以排序的吧
还有,你那个查询语句是不是有问题,怎么查询字段里面还有那么多不是聚合函数的字段,应该会有语法错误吧!
SELECT
users.uid,
users.email,
users.mo,
users.ret_over,
users.ret_lock,
users.ret_over + users.ret_lock AS total,
user_login.id,
user_login.createdip,
user_login.area
FROM
users LEFT JOIN user_login ON users.uid = user_login.uid
ORDER BY
total desc,user_login.id desc
后面我加上去了那两个字段
你这句‘’只有第一个字段的数据相同的列,才会按照第二条件进行排序的‘’没懂意思
@打我队友: 这个是SQL很基础的一个排序逻辑
我给你举一个查询结果的例子吧
total,user_login.id
1009 1
1008 2
1007 4
1007 3
1006 5
不知道你看懂没有。。。。
你看找白老师搜一下,ORDER BY 多个字段的排序逻辑
也可以参考一下下面的一个博客:
https://blog.csdn.net/lzj3462144/article/details/79554060
@猴子哥: 没错,哈哈哈哈
有点理解了,但是我这是两张表的不同字段排序,要第一个表的字段排序,也要第二个表的字段排序
@打我队友: 怎么可能一个数据,有两个字段都同时完整的排序嘛。
是不是需求有问题啊!!!!!
一次只能按照一个店字段严格排序,例外一个字段排序效果,只有当第一个排序值相同的时候,在以第二字段排序
@猴子哥: 那就没办法两个不同表字段的排序了。。。
两张表的不同字段排序,要第一个表的字段排序,也要第二个表的字段排序
排序规则为啥不能实现你想要的结果,满足第一个表的字段排序,不一定(现实中是一定不满足)满足第二个表的字段排序,
那么数据库就必须知道谁更重要,但是数据库并不知道你这2个字段的谁更重要(权重更大)
total , user_login.id
1009 , 1
1008 , 3
1007 , 2
1006 , 4
比如:1008和1007,按total排序和按user_login.id结果是不同的
解决方案,分为2次查询(一次第一个表的字段排序,一次第二个表的字段排序)(或者查询到内存,自己排序,自己定义如何排序,)
分两次查到话很麻烦,这些都是批量数据,查不出来的
可能是你理解错了吧,排序不可能同时几个字段,肯定有先后顺序的。