我希望按照输入到IN()函数中的顺序,通过对以下查询中返回的项进行排序。
输入:
SELECT id, name FROM mytable WHERE name IN ('B', 'A', 'D', 'E', 'C');
输出:
| id | name |
^--------^---------^
| 5 | B |
| 6 | B |
| 1 | D |
| 15 | E |
| 17 | E |
| 9 | C |
| 18 | C |
有什么想法吗?
发布于 2009-06-06 00:16:16
SELECT id, name
FROM mytable
WHERE name IN ('B', 'A', 'D', 'E', 'C')
ORDER BY FIELD(name, 'B', 'A', 'D', 'E', 'C')
FIELD函数返回剩余字符串列表中第一个字符串的位置。
但是,在性能方面,有一个表示排序顺序的索引列,然后按此列排序,效果会好得多。
发布于 2009-06-06 01:54:20
另一种选择是:http://dev.mysql.com/doc/refman/5.0/en/sorting-rows.html
select *
from tablename
order by priority='High' DESC, priority='Medium' DESC, priority='Low" DESC;
因此,在您的情况下(未测试)将是
SELECT id, name
FROM mytable
WHERE name IN ('B', 'A', 'D', 'E', 'C')
ORDER BY name = 'B', name = 'A', name = 'D', name = 'E', name = 'C';
取决于你在做什么,我发现它有点古怪,但总是在玩了一小会后就能工作了。
发布于 2009-06-06 00:13:57
试试像这样的东西
... ORDER BY (CASE NAME WHEN 'B' THEN 0 WHEN 'A' THEN 1 WHEN ...
https://stackoverflow.com/questions/958627
复制相似问题