各位大虾,小弟碰到一个搜索结果排序的问题。
具体如下: 使用Sqlite3,一张表里面有Pt_Name一项,类型是char,里面的数据有:pt1 pt10 pt11 pt2 pt20。
然后搜索Pt_Name。结果却发现,无论怎么更改搜索限制条件,结果都无法按照以下方式:
pt1 pt2 pt10 pt11 pt20
如果想要现实以上功能,该如何去做?
先谢谢各位咯!
------解决方案--------------------
- SQL code
sqlite> select * from t_gulangduxing; Pt_Name pt1 pt10 pt11 pt2 pt20 sqlite> sqlite> select * from t_gulangduxing ...> order by substr(Pt_Name,3)+0; Pt_Name pt1 pt2 pt10 pt11 pt20 sqlite>
------解决方案--------------------
似乎只能通过UDF扩展来改变比较算法
------解决方案--------------------
数据库的操作是基于表,基于表的操作是基于字段。
按楼主的说法,要对一个字段里面的内容进行排序,这样的话,仅仅通过SQL命令应该是没办法实现的。不管是左连接,右连接,子查询等等都不行。正常的做法是把数据取下来在客户端用程序解决。思路是取出字段容,以DELPHI为例,按' '进行分解,分解后一个字段的内容可以分成很多个字串,如PT1,PT2,PT3...存放在TStringList中,然后对TStringList做排序,冒泡什么都行,最后把TStringList合成一个字段,然后显示就OK了。
我自己写了一个SQLite查询器,这里下载:http://robot88.ro.funpic.org/
------解决方案--------------------
还有一种方法:
SELECT QQ,GROUP_CONCAT(NEWZ ,'') FROM (
SELECT *,SUBSTR(QQ,ID,1) AS NEWZ FROM AA A LEFT JOIN LSB B ON LENGTH(A.qq)>=B.ID)
WHERE UPPER(NEWZ) NOT IN('P','T')
GROUP BY QQ
ORDER BY 0+GROUP_CONCAT(NEWZ ,'')
LSB:字段ID,1-10000
注意:3.6。23支持GROUP_CONCAT
------解决方案--------------------
SQLITE 3.5.4就支持GROUP_CONCAT了,你的版本?