2017-02-09 4 views
0

Как сделать запрос к базе данных mysql для сортировки результатов в порядке убывания с условием, что если в списке появился конкретный элемент, присутствующий в списке. Например, у меня есть таблица статьи post_feeds, которая сопоставляется с категорией в категории map table 'post_category_mapping'. Я пытаюсь получить все сообщения из таблицы 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

Я думаю, что ваш запрос близко. Для того, чтобы сделать CASE трюк работу при заказе, вы можете назначить 0 для сопоставления идентификаторов категории и 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.

Смежные вопросы