当前位置:数据库 > MySQL >>

Mysql 排序问题

查询条件是:SELECT username FROM `cmstop_member` WHERE username LIKE "%bi%" ORDER BY CASE username WHEN username LIKE "bi%" THEN 1 END 得到下面的结果: 123bibo bibo dibin1234 yxuebing MissLebi 而需要的数据结果为 bibo 123bibo dibin1234 yxuebing MissLebi
补充:根据上面条件得出的结果,唯一的不足是:查询结果带数值的会排到字母的前面。
bibo
123bibo
dibin1234
yxuebing
MissLebi
而需要得出的结果是带数值的结果应该排到后面。

需求是根据即时的输入来查询用户名:比如我输入bi,想得到的顺序是。即输入的字符,在查询结果首位,按降序排到前面;而结果中包含并不在首位,则按降序排到后面。
追问:dibin1234
yxuebing
bibo
MissLebi
123bibo
改成后是这样,另请问 left(username,1) between 1 and 9 这个的意图是限制什么的?多谢!!!
咱不差分!
答案:你给出的结果要求的排序规则是什么?无法理解。排序无非是依据数字值和字符值。数字列类型很容易理解。字符类型就有很多。比如依据转换后的ASIIK码,汉字有首拼,笔画数,等等呢个。 

SELECT username FROM `cmstop_member` WHERE username LIKE "bi%" ORDER BY CASE username WHEN username LIKE "bi%" THEN 1 ELSE 0  END 

这个应该可以达到你的要求。匹配输入的结果再前显示。但是没有对,去除输入符之后的字符串排序
其他:这种排序规则是什么,无法实现吧? try:

SELECT username FROM `cmstop_member` WHERE username LIKE "%bi%" ORDER BY CASE username WHEN username LIKE "bi%" THEN 1 ELSE 0  END 你所需要的字段排序没有排序条件,不能直接用该字段排序,因为排序方法中没有这种,如果靠编程解决不值。最好的办法是增加一个排序的字段,比如用序号来排列。 ORDER BY CASE WHEN left(username,1) between 1 and 9 THEN 1 else 0 END

这样试试看呢? 

上一个:MYSQL 5.5 语法错误
下一个:oracle 如何获取表的结构,就像mysql里的desc命令一样的功能,

Oracle
MySQL
Access
SQLServer
DB2
Excel
SQLite
SYBASE
Postgres
如果你遇到数据库难题:
请访问www.zzzyk.com 试试
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,