2017-02-09 13 views
0

リストにある特定の項目が最初に来る場合、結果を降順で並べ替えるためにmysqlデータベースにクエリを行う方法。 たとえば、カテゴリマップテーブル 'post_category_mapping'のカテゴリにマップされている、いくつかの投稿 'post_feeds'記事の表があります。私はソートされた順序でテーブル 'post_feeds'からすべての投稿を取得しようとしますが、リスト内のcategory_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

私はあなたのクエリが近くにあると思います。ご注文時に、あなたが一致するカテゴリIDの0を割り当てることができますCASEトリック作業を行い、非マッチング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で降順に並べ替えられます。