Как составить запрос mysql: выборка, но обязательное включение?

Добрый день!

Помогите, плз, с запросом:
Хочу сделать выборку топиков из форума с максимальным количеством просмотров:
SELECT id_first_msg,id_topic,num_views FROM smf_topics order by num_views desc limit 50


А теперь надо, чтобы строки с определенным id_topic были по любому исключены оттуда, а другие id_topic были точно включены в результаты выборки.
Как изменить запрос?
Спасибо!
  • Вопрос задан
  • 2723 просмотра
Решения вопроса 1
@IgoNsk
backend web developer
# все, кроме определенных
  select
    id_first_msg,
    id_topic,
    num_views,
    0 as priority
  
  from
    smf_topics 
  
  where
    id_topic not in (1,2,3,4)
  
  # те, которые должны быть всегда включены  
  union
  select
    id_first_msg,
    id_topic,
    num_views,
    1 as priority 
  
  from
    smf_topics 
  
  where
    id_topic in (5,6,7,8,9)
  
  order by 
    priority desc,
    num_views desc 
  
  limit 50
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@IgoNsk
backend web developer
И если надо чтобы результат был отсортирован еще раз по кол-ву просмотров, то так
select
    Result.*
    
  from
    (
      # все, кроме определенных
      select
        id_first_msg,
        id_topic,
        num_views,
        0 as priority
      
      from
        smf_topics 
      
      where
        id_topic not in (1,2,3,4)
      
      # те, которые должны быть всегда включены  
      union
      select
        id_first_msg,
        id_topic,
        num_views,
        1 as priority 
      
      from
        smf_topics 
      
      where
        id_topic in (5,6,7,8,9)
      
      order by 
        priority desc,
        num_views desc 
      
      limit 50
    ) as Result
  
  order by
    num_views desc
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы