Mat*_*att 101 mysql sql-order-by where-clause
我希望按照它们输入IN()函数的顺序对以下查询中返回的项进行排序.
INPUT:
SELECT id, name FROM mytable WHERE name IN ('B', 'A', 'D', 'E', 'C');
Run Code Online (Sandbox Code Playgroud)
OUTPUT:
| id | name |
^--------^---------^
| 5 | B |
| 6 | B |
| 1 | D |
| 15 | E |
| 17 | E |
| 9 | C |
| 18 | C |
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
Aym*_*ieh 215
SELECT id, name
FROM mytable
WHERE name IN ('B', 'A', 'D', 'E', 'C')
ORDER BY FIELD(name, 'B', 'A', 'D', 'E', 'C')
Run Code Online (Sandbox Code Playgroud)
该场函数返回字符串的剩余列表中的第一个字符串的位置.
但是,如果有一个表示排序顺序的索引列,然后按此列排序,则性能要好得多.
joe*_*von 28
另一个选项来自: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;
Run Code Online (Sandbox Code Playgroud)
所以在你的情况下(未经测试)将是
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';
Run Code Online (Sandbox Code Playgroud)
根据你正在做的事情,我发现它有点古怪但是在玩了一下之后总是让它起作用.
| 归档时间: |
|
| 查看次数: |
74810 次 |
| 最近记录: |