【发布时间】:2014-07-17 14:28:46
【问题描述】:
我找到了几个questions on stackoverflow,它们处理自定义排序、自定义排序字母表。但是,我找不到我的问题的解决方案。
想象一下我们有一张这样的桌子:
# videoid #
F01
F02
F031
F032
G01
G02
GEO01
PR011
PR012
TRI01
TRI021
TRI022
VEK01
我们想按非字母排序,而不是 A-Z,它应该是 G、F、GEO、TRI、PR、VEK。为此,我必须定义自定义排序并考虑使用% 通配符来获取所有以例如开头的结果。 “F”。
我尝试了mysql的CASEWHEN查询,但是当有LIKE比较时它似乎不起作用:
SELECT * FROM `videos`
ORDER BY CASE `videoid`
WHEN videoid LIKE 'G%' THEN 1
WHEN videoid LIKE 'F%' THEN 2
WHEN videoid LIKE 'GEO%' THEN 3
WHEN videoid LIKE 'TRI%' THEN 5
WHEN videoid LIKE 'PR%' THEN 4
WHEN videoid LIKE 'VEK%' THEN 6
ELSE 0
END
我的尝试
WHEN (LEFT(videoid, 1) = 'G') THEN 1
WHEN (LEFT(videoid, 1) = 'F') THEN 2
WHEN (LEFT(videoid, 3) = 'GEO') THEN 3
...
也失败了。
我也尝试使用FIELD但没有成功:
SELECT * FROM `videos`
ORDER BY FIELD(videoid, 'G%','F%','GEO%','TRI%','PR%','VEK%');
什么是正确的 mysql 查询?
【问题讨论】:
-
在 SQLFiddle.com 上发布您的表格并向我们展示。
-
@Ravinder:我是 sql fiddle 新手,我的尝试没有输出查询:sqlfiddle.com/#!2/7a5cf0/1