我有以下查询:
SELECT *
FROM articles
WHERE article.category IN (1, 57, 67, 78)
ORDER BY article.category ASC
我想订购它,而不是按升序排序:
ORDER BY article.category (1, 67, 78, 57)
这可能吗?
答案 0 :(得分:3)
使用FIELD功能: -
SELECT *
FROM articles
WHERE article.category IN (1, 57, 67, 78)
ORDER BY FIELD(article.category, 1, 67, 78, 57)
编辑 - 如果没有找到它将返回0,所以如果你想要先排序2个值,那么可能只是在函数中有2个但是反转并按降序排序。
SELECT *
FROM articles
WHERE article.category IN (1, 57, 67, 78)
ORDER BY FIELD(article.category, 67, 1) DESC
这将首先列出1类,之后是67类,其次是其他类别
答案 1 :(得分:2)
您可以使用字符串函数FIELD():
bundle exec rake:test:clone
(即使类别是数字,它也会自动转换为字符串)。
否则,要定义任何自定义顺序,您可以使用CASE WHEN,例如:
ORDER BY FIELD(article.category, 1, 67, 78, 57)
答案 2 :(得分:0)
实现这一目标的另一种方法是使用JOIN
和子查询以及指示顺序的列:
SELECT a.* -- if join is not on `UNIQUE/PK` column DISTINCT may be required
FROM articles a
JOIN (SELECT 1 AS ord, 1 AS category
UNION ALL SELECT 2, 57
UNION ALL SELECT 3, 67
UNION ALL SELECT 4, 78) AS sub
ON a.category = sub.category
ORDER BY sub.ord ASC