如何查询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"
答案 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
降序排列。