Mysql 按操作器中的where排序

Mysql 按操作器中的where排序,mysql,Mysql,如何对mysql数据库进行查询,以按降序对结果进行排序,条件是列表中的某个特定项是否首先出现。 例如,我有一个post'post_feed'文章的表,它与category映射表'post_category_mapping'中的category映射。我尝试按排序顺序从“post_feed”表中检索所有帖子,但条件是列表中的category_id是否首先出现 我尝试通过以下查询来实现这一点: SELECT DISTINCT post_category_mapping.post_id,

如何对mysql数据库进行查询,以按降序对结果进行排序,条件是列表中的某个特定项是否首先出现。 例如,我有一个post'post_feed'文章的表,它与category映射表'post_category_mapping'中的category映射。我尝试按排序顺序从“post_feed”表中检索所有帖子,但条件是列表中的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"

我认为你的问题很接近。要使
案例
技巧在订购时起作用,您可以为匹配的类别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\u id
为1或6的所有记录放在不具有这些值的所有记录之前。在每个匹配/非匹配块中,记录将按
posts\u feed.id

降序排列。请参见: