首页 新闻 搜索 专区 学院

关于一个mysql查询排序问题

0
[已解决问题] 解决于 2020-06-04 14:27

一张商品表(主表) item
一张商品库存表(关联表) item_stock

商品表对应多个商品库存表,现有一个关于商品列表的查询SQL,要求库存为0的商品排列在最后显示(库存表里面有商品的itemId字段),其他的原先排序逻辑不改变

Mr_伍先生的主页 Mr_伍先生 | 初学一级 | 园豆:5
提问于:2020-04-29 10:57
< >
分享
最佳答案
0

看看是不是这样, 有库存的按item表排序在前面, 没库存的在后面

原始测试数据

奖励园豆:5
风浪 | 老鸟四级 |园豆:2861 | 2020-04-29 13:47
其他回答(2)
0

select * ,( select count(*) from item_stock as is2 where is2.itemid = i.id ) as sum
from item as i
join item_stock as is on i.id = is.itemid
group by i.id
order by sum desc

阅尽三千 | 园豆:180 (初学一级) | 2020-04-29 11:13

item_stock表别称换一个,is是保留字符

支持(0) 反对(0) 阅尽三千 | 园豆:180 (初学一级) | 2020-04-29 11:19

如果我只想使用商品实体接收SQL返回的对象呢? 即查询的结果映射 Item实体,仅仅映射Item实体

支持(0) 反对(0) Mr_伍先生 | 园豆:5 (初学一级) | 2020-04-29 11:23

@Mr_伍先生: 那就不关联查询啊,只查库存表就行了

select * ,( select count(*) from item_stock as i2 where i2.itemid = i.itemid ) as sum
from item_stock as i
group by i.itemid
order by sum desc

支持(0) 反对(0) 阅尽三千 | 园豆:180 (初学一级) | 2020-04-29 11:28

@阅尽三千: 库存表没有我想要的商品信息

支持(0) 反对(0) Mr_伍先生 | 园豆:5 (初学一级) | 2020-04-29 11:53
0
select distinct a, b,c from item left join itemstock on item.id = itemstock.itemid
where itemstock.id is not null order by somthing
union
select distinct  a,b,c from item left join itemstock on item.id = itemstock.itemid
where itemstock.id is null order by something
会长 | 园豆:8212 (大侠五级) | 2020-04-29 14:40

大概看了一下你的SQL的意思,先查询库存不是0的商品,按照原有的规则进行排序

再查询库存是0的商品,按照原有的规则进行排序,

问题是如果一个商品Item有多个sku每个都对应有库存信息,那么就是一个商品会出现多次,可能不太

符合我的业务场景

支持(0) 反对(0) Mr_伍先生 | 园豆:5 (初学一级) | 2020-04-29 14:44

@Mr_伍先生: sku是什么?我加了distinct 啊

支持(0) 反对(0) 会长 | 园豆:8212 (大侠五级) | 2020-04-29 15:04

@会长: 对,你说的对,这种思路不失为解决问题的办法之一

支持(0) 反对(0) Mr_伍先生 | 园豆:5 (初学一级) | 2020-04-29 15:05
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册