2017-02-09 87 views
0

如何對mysql數據庫進行查詢,以降序對結果進行排序,條件是列表中出現的特定項目首先出現。 例如,我有一張貼有類別映射表'post_category_mapping'中的類別的帖子'post_feeds'文章。我嘗試按排序順序檢索表'post_feeds'中的所有帖子,但條件是list_id存在於列表中。以IN運算符排序

我試圖通過這個查詢做到這一點:

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

看到這個:http://stackoverflow.com/questions/35109084/conditional-order-by –

回答

1

我想查詢接近。爲了使訂貨時CASE技巧的工作,你可以指定一個0匹配類ID和非匹配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 

這將有所有的記錄之前的1或6 category_id所有記錄不具有這些價​​值。並且在每個匹配/不匹配塊中,記錄將按照posts_feed.id降序排列。