首页 新闻 赞助 找找看

两个关联表进行查询,查询出来后两个表的两个字段进行排序,但是另外一个表的字段不是倒序

0
悬赏园豆:100 [已解决问题] 解决于 2021-05-10 15:46

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试过这样也是不对的

路过的一个小测试的主页 路过的一个小测试 | 初学一级 | 园豆:3
提问于:2019-06-13 15:41
< >
分享
最佳答案
0

优先按照第一个排序字段排序,当第一个字段相同时,按照第二个字段排序,没毛病,就是这样的。

收获园豆:100
会长 | 专家六级 |园豆:12401 | 2019-06-13 15:49

第一个字段的排序是没错的,但是第二个字段还是顺序的排序
先排total,再排user_login.id这两个字段是不影响的,实际结果第二个没有按照desc排

路过的一个小测试 | 园豆:3 (初学一级) | 2019-06-13 15:52

@打我队友: 你把建表语句和insert语句给我发过来,我试试

会长 | 园豆:12401 (专家六级) | 2019-06-13 15:56

@会长: 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) )
inserusert(uid,email,mo)VALUES(123,123,123)
inseruser_logint(id,uid,created,createdip,area)VALUES(1,123,123,123154,,132.12313.12,'fasdfaf')

路过的一个小测试 | 园豆:3 (初学一级) | 2019-06-13 16:06

@打我队友: total 不是一个字段?建表语句里怎么没有

会长 | 园豆:12401 (专家六级) | 2019-06-13 16:45

@会长: 是别名 over+lock的别名

路过的一个小测试 | 园豆:3 (初学一级) | 2019-06-13 17:55

@打我队友: 结果肯定没错,可能是你对排序的理解错了。就是根据第一个字段排序,当第一个字段的数据一样时才根据第一个字段排

会长 | 园豆:12401 (专家六级) | 2019-06-13 18:08

@会长: 那么我要把另外一个表的字段进行排序,怎么写,求教

路过的一个小测试 | 园豆:3 (初学一级) | 2019-06-14 09:21
其他回答(3)
0

ORDER BY
total desc,user_login.id desc#排序的两个表的不同字段
根据两个字段排序,只有第一个字段的数据相同的列,才会按照第二条件进行排序的
并且,我看了你的语句,建表语句都没有ret_over 、 ret_lock这两个字段

程序员修炼之旅 | 园豆:776 (小虾三级) | 2019-06-13 16:23

我创建了一个表,和查询语句,是可以排序的吧
还有,你那个查询语句是不是有问题,怎么查询字段里面还有那么多不是聚合函数的字段,应该会有语法错误吧!
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

支持(0) 反对(0) 程序员修炼之旅 | 园豆:776 (小虾三级) | 2019-06-13 16:33

后面我加上去了那两个字段
你这句‘’只有第一个字段的数据相同的列,才会按照第二条件进行排序的‘’没懂意思

@打我队友: 这个是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

支持(0) 反对(0) 程序员修炼之旅 | 园豆:776 (小虾三级) | 2019-06-13 16:43

@猴子哥: 没错,哈哈哈哈

有点理解了,但是我这是两张表的不同字段排序,要第一个表的字段排序,也要第二个表的字段排序

@打我队友: 怎么可能一个数据,有两个字段都同时完整的排序嘛。
是不是需求有问题啊!!!!!
一次只能按照一个店字段严格排序,例外一个字段排序效果,只有当第一个排序值相同的时候,在以第二字段排序

支持(0) 反对(0) 程序员修炼之旅 | 园豆:776 (小虾三级) | 2019-06-20 09:35

@猴子哥: 那就没办法两个不同表字段的排序了。。。

0

两张表的不同字段排序,要第一个表的字段排序,也要第二个表的字段排序

排序规则为啥不能实现你想要的结果,满足第一个表的字段排序,不一定(现实中是一定不满足)满足第二个表的字段排序,
那么数据库就必须知道谁更重要,但是数据库并不知道你这2个字段的谁更重要(权重更大)
total , user_login.id
1009 , 1
1008 , 3
1007 , 2
1006 , 4
比如:1008和1007,按total排序和按user_login.id结果是不同的
解决方案,分为2次查询(一次第一个表的字段排序,一次第二个表的字段排序)(或者查询到内存,自己排序,自己定义如何排序,)

大志若愚 | 园豆:2138 (老鸟四级) | 2019-06-18 09:45

分两次查到话很麻烦,这些都是批量数据,查不出来的

0

可能是你理解错了吧,排序不可能同时几个字段,肯定有先后顺序的。

科技改变未来☆ | 园豆:219 (菜鸟二级) | 2019-07-03 15:40
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册