alex4answ
@alex4answ

Получить строку с максимальным совпадением?

Нужно получить список описания фильмов для текущего языка и "сайта"
Есть таблица movie_desc:
id | movie_id | text | site_id | lang

Есть запрос:
SELECT * FROM `movie` where ( site_id = 15 OR site_id = 1 OR site_id IS NULL) AND ( lang = 'ru' OR lang = 'en' OR lang IS NULL)


Запрос возвращает почти все вхождения (оно и понятно, потому что site_id, lang может быть NULL)

Как мне вернуть по 1 строку с наибольшим совпадением по условию на каждый фильм?

Думал использовать GROUP BY по movie_id, но это не агрегированное поле.

P.S. Суть сия извращенства:
Есть фильмы, а есть описания к ним на разных языках, у некоторых фильмов не заполнено описания для какого-то языка, и должна выводиться либо для стандартного языка (lang en) либо общее описание (lang IS NULL)
  • Вопрос задан
  • 108 просмотров
Пригласить эксперта
Ответы на вопрос 1
@baitarakhov
select *
from (
         select movie_desc.*,
                row_number()
                        over (partition by movie_id order by domain_id desc) as rn_domain,
  		row_number()
                        over (partition by movie_id order by language_id desc) as rn_lang
         from movie_desc
     ) x
where x.rn_domain = 1 and x.rn_lang = 1;


https://www.db-fiddle.com/f/ipkTSyKiavc4oQ8iRPTKN6/0
Ответ написан
Ваш ответ на вопрос

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

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