Mysql 如何在ORDERBY子句中定义自定义订单?
我有以下疑问:Mysql 如何在ORDERBY子句中定义自定义订单?,mysql,Mysql,我有以下疑问: SELECT * FROM articles WHERE article.category IN (1, 57, 67, 78) ORDER BY article.category ASC 我不想按升序排列,而是按如下顺序排列: ORDER BY article.category (1, 67, 78, 57) 这可能吗?您可以使用字符串函数字段() (即使category是一个数字,它也将自动转换为字符串) 否则,要定义任何自定义订单,您可以仅在以下情况下使用CASE,例如
SELECT *
FROM articles
WHERE article.category IN (1, 57, 67, 78)
ORDER BY article.category ASC
我不想按升序排列,而是按如下顺序排列:
ORDER BY article.category (1, 67, 78, 57)
这可能吗?您可以使用字符串函数字段() (即使category是一个数字,它也将自动转换为字符串) 否则,要定义任何自定义订单,您可以仅在以下情况下使用CASE,例如:
ORDER BY
CASE
WHEN article.category IN (1, 67) THEN 1
WHEN article.category IN (78, 57) THEN 2
ELSE 3 END
可以使用字符串函数字段() (即使category是一个数字,它也将自动转换为字符串) 否则,要定义任何自定义订单,您可以仅在以下情况下使用CASE,例如:
ORDER BY
CASE
WHEN article.category IN (1, 67) THEN 1
WHEN article.category IN (78, 57) THEN 2
ELSE 3 END
使用字段功能:-
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,然后再放置任何其他类别使用字段功能:-
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,然后再放置任何其他类别另一种实现方法是使用
连接
和子查询,其中列指示顺序:
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
实现这一点的另一种方法是使用
连接
和子查询,其中列指示顺序:
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
我可以定义两个类别而不是全部吗?例如,我希望类别1和67排在第一位。顺序的其余部分不重要。你可以,我已经用建议编辑了答案。我可以定义两个类别而不是全部吗?例如,我希望类别1和67排在第一位。顺序的其余部分不重要你可以,我已经用建议编辑了答案。