按IN运算符的顺序排序

时间:2017-02-09 09:00:26

标签: mysql

如何查询mysql数据库以按降序对结果进行排序,条件是列表中存在的特定项是第一个。 例如,我有一个帖子'post_feeds'文章的表格,该文章与类别地图表'post_category_mapping'中的类别进行了映射。我尝试按排序顺序检索表'post_feeds'中的所有帖子,但条件是如果列表中的category_id首先出现。

我尝试通过此查询执行此操作:

SELECT DISTINCT post_category_mapping.post_id,
                posts_feeds.post_title
FROM post_category_mapping
INNER JOIN posts_feeds
    ON post_category_mapping.post_id = posts_feeds.post_id
ORDER BY CASE WHEN post_category_mapping.category_id IN (1,6)
              THEN posts_feeds.id END DESC,
         posts_feeds.id DESC"

1 个答案:

答案 0 :(得分:1)

我认为您的查询很接近。要在订购时使CASE诀窍有效,您可以为匹配的类别ID分配0,为不匹配的ID分配1

SELECT DISTINCT t1.post_id,
                t2.post_title
FROM post_category_mapping t1
INNER JOIN posts_feeds t2
    ON t1.post_id = t2.post_id
ORDER BY CASE WHEN t1.category_id IN (1,6) THEN 0 ELSE 1 END,
         t2.id DESC

这将在所有没有这些值的记录之前放置category_id为1或6的所有记录。在每个匹配/非匹配块中,记录将按posts_feed.id降序排列。