无忧启动论坛

标题: 请教SQLite3的一个排序问题 [打印本页]

作者: 红毛樱木    时间: 2021-6-6 11:20
标题: 请教SQLite3的一个排序问题
假设有一组数据
b a c
按顺序搜索,
select *,where ( ID='b' or ID='a' or ID='c' ) from test;

结果怎么按开始的顺序排序呢?就是按 b a c的顺序排序?
因为还有其他排序规则,所以想在order by里把这个排序规则优先,不知道这个排序规则应该怎么写。

-------------------------------
我同学给我出了一招,我试了不行
select *,form test where ID in ('b' ,'a' , 'c' ) order by 'b' ,'a' , 'c'


作者: huaqingyuan    时间: 2021-6-6 11:50
难得这里还有问SQL相关的问题的。 select  *  form test order by instr('bac',ID)

原理,先查找ID在‘BAC里面的位置’,根据位置排序
作者: caocaofff    时间: 2021-6-6 12:01
哇哦,这里果然人才济济
作者: 527104427    时间: 2021-6-6 12:22
huaqingyuan 发表于 2021-6-6 11:50
难得这里还有问SQL相关的问题的。 select  *  form test order by instr('bac',ID)

原理,先查找ID在‘B ...

高手!赞一个
作者: 红毛樱木    时间: 2021-6-6 12:36
huaqingyuan 发表于 2021-6-6 11:50
难得这里还有问SQL相关的问题的。 select  *  form test order by instr('bac',ID)

原理,先查找ID在‘B ...

大佬
b a c
假如是很长的字符串咋办
比如:
dafdafafd     sfsadfjklhhkl     asdfljalfjlasjflk
作者: 2011slkj    时间: 2021-6-6 12:36
gao
作者: huaqingyuan    时间: 2021-6-6 12:38
select  *  form test order by instr('dafdafafd, sfsadfjklhhkl,asdfljalfjlasjflk',ID)
作者: huaqingyuan    时间: 2021-6-6 12:42
主要看你需求呀,比如你可能要第一个字母按照BCA 排序,那么你可以提取ID的第一个字母,比如一分厂,二分厂,三分厂,正常排序就不是想要的结果,你可以先替换为数字123在排序,如果只是这三个分厂排序,也可以按我上面的方法
作者: wsyifeng    时间: 2021-6-6 13:02
一般排序 是规则性的条件 b a c 完全没有规则呀
作者: hua_wuxin    时间: 2021-6-6 13:10
如果你是想按记录在数据表中的物理顺序排序:select * from test order by rowid

如果你是想按查询条件的先后排序:
select *, 1 as ordidx from test where name = 'b'
union all
select *, 2 as ordidx from test where name = 'a'
union all
select *, 3 as ordidx from test where name = 'c'
order by ordidx

作者: 红毛樱木    时间: 2021-6-6 13:16
感谢各位大佬
作者: guoziwei    时间: 2021-6-6 17:05
人才多多,感谢有人帮助你解决问题!
作者: 51xp    时间: 2021-6-6 19:31
学习,SQL高手到处有。
作者: lbw2007    时间: 2021-6-8 09:21
Oracle傻瓜式:

select * from test order by decode(ID,'a',1,'b',2,'c',3,4);
select * from test order by (case ID when 'a' then 1 when 'b' then 2 when 'c' then 3 else 4 end);
作者: huaqingyuan    时间: 2021-8-17 12:36
红毛樱木 发表于 2021-6-6 12:36
大佬
b a c
假如是很长的字符串咋办

select  *  form test order by instr('dafdafafd,sfsadfjklhhk,asdfljalfjlasjflk',ID)
作者: walkinrain2018    时间: 2024-6-8 18:24
1,物理顺序sqlite和mysql都存在rowid。2,自定义顺序,开新表自定义顺序,然后join




欢迎光临 无忧启动论坛 (http://wuyou.net/) Powered by Discuz! X3.3