无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 5599|回复: 15
打印 上一主题 下一主题

[求助] 请教SQLite3的一个排序问题

  [复制链接]
跳转到指定楼层
1#
发表于 2021-6-6 11:20:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
假设有一组数据
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'

2#
发表于 2021-6-6 11:50:41 | 只看该作者
难得这里还有问SQL相关的问题的。 select  *  form test order by instr('bac',ID)

原理,先查找ID在‘BAC里面的位置’,根据位置排序

点评

大佬 b a c 假如是很长的字符串咋办 比如: dafdafafd sfsadfjklhhkl asdfljalfjlasjflk  详情 回复 发表于 2021-6-6 12:36
高手!赞一个  详情 回复 发表于 2021-6-6 12:22

评分

参与人数 1无忧币 +5 收起 理由
527104427 + 5 赞一个!

查看全部评分

回复

使用道具 举报

3#
发表于 2021-6-6 12:01:17 | 只看该作者
哇哦,这里果然人才济济
回复

使用道具 举报

4#
发表于 2021-6-6 12:22:39 | 只看该作者
huaqingyuan 发表于 2021-6-6 11:50
难得这里还有问SQL相关的问题的。 select  *  form test order by instr('bac',ID)

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

高手!赞一个
回复

使用道具 举报

5#
 楼主| 发表于 2021-6-6 12:36:02 | 只看该作者
huaqingyuan 发表于 2021-6-6 11:50
难得这里还有问SQL相关的问题的。 select  *  form test order by instr('bac',ID)

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

大佬
b a c
假如是很长的字符串咋办
比如:
dafdafafd     sfsadfjklhhkl     asdfljalfjlasjflk

点评

select * form test order by instr('dafdafafd,sfsadfjklhhk,asdfljalfjlasjflk',ID)  详情 回复 发表于 2021-8-17 12:36
回复

使用道具 举报

6#
发表于 2021-6-6 12:36:28 | 只看该作者
gao
回复

使用道具 举报

7#
发表于 2021-6-6 12:38:30 | 只看该作者
select  *  form test order by instr('dafdafafd, sfsadfjklhhkl,asdfljalfjlasjflk',ID)
回复

使用道具 举报

8#
发表于 2021-6-6 12:42:08 | 只看该作者
主要看你需求呀,比如你可能要第一个字母按照BCA 排序,那么你可以提取ID的第一个字母,比如一分厂,二分厂,三分厂,正常排序就不是想要的结果,你可以先替换为数字123在排序,如果只是这三个分厂排序,也可以按我上面的方法
回复

使用道具 举报

9#
发表于 2021-6-6 13:02:18 | 只看该作者
一般排序 是规则性的条件 b a c 完全没有规则呀
回复

使用道具 举报

10#
发表于 2021-6-6 13:10:22 | 只看该作者
如果你是想按记录在数据表中的物理顺序排序: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
回复

使用道具 举报

11#
 楼主| 发表于 2021-6-6 13:16:19 来自手机 | 只看该作者
感谢各位大佬
回复

使用道具 举报

12#
发表于 2021-6-6 17:05:41 | 只看该作者
人才多多,感谢有人帮助你解决问题!
回复

使用道具 举报

13#
发表于 2021-6-6 19:31:11 | 只看该作者
学习,SQL高手到处有。
回复

使用道具 举报

14#
发表于 2021-6-8 09:21:06 | 只看该作者
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);
回复

使用道具 举报

15#
发表于 2021-8-17 12:36:18 | 只看该作者
红毛樱木 发表于 2021-6-6 12:36
大佬
b a c
假如是很长的字符串咋办

select  *  form test order by instr('dafdafafd,sfsadfjklhhk,asdfljalfjlasjflk',ID)
回复

使用道具 举报

16#
发表于 2024-6-8 18:24:28 | 只看该作者
1,物理顺序sqlite和mysql都存在rowid。2,自定义顺序,开新表自定义顺序,然后join
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-13 03:59

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表