Слишком сложный SQL запросс

67
06 декабря 2021, 12:20

У меня есть библиотека, в ней есть книги в оригинале (для каждой книги разный язык) и к ним (не ко всем) есть книги которые переведены на другие языки (вообще разные языки для каждой книги, к тому же их можеш бы разное количество для каждой книги), в базе храняться такие поля:

  1. Идентификатор книги (для оригинала и переведенных книг по этому оригиналу одинаковые)
  2. Названия книги
  3. Язык на котором написана книга
  4. Логическое поле - книга являеться оригиналом или нет

И пользователь запрашивает все доступные ему книги (предположим вообще все), у него стоит список из языков, последовательность которых нужно учитывать, к примеру, у него стоит:

  1. Английский
  2. Русский
  3. Украинский

И ему нужно подать книгу (без разницы оригинал или перевод) на английском языке, если книги с таким переводом нет (либо это не оргинал) то на русском, если на русском нет (либо это не оригинал) то на украинском.

Answer 1

Этот запрос ещё нужно тестировать на данных.

SELECT book.name, book.is_origin, user_language_list.sort
FROM user_language_list
LEFT JOIN book
ON 
    user_language_list.user_id = ? 
    AND 
    book.id = ? 
    AND
    user_language_list.language_id = book.language_id
WHERE book.name IS NOT NULL
ORDER BY user_language_list.sort 
LIMIT 1

Идея в следующем (при условии, что пользователь один, а id книги заранее известно):

  1. Берём список языков пользователя из таблицы user_language_list;
  2. Присоединяем книги из таблицы book с нужным id;
  3. Отсекаем строки, для которых нет книг в результирующем наборе (поле name - пусто);
  4. Сортируем результирующий набор по приоритету из таблицы с языками пользователя;
  5. Оставляем в выборке единственный результат.
READ ALSO
Как узнать номер кликнутого элемента?

Как узнать номер кликнутого элемента?

Есть список и параграфы (к примеру):

275
Discord.js не меняет название канала

Discord.js не меняет название канала

Идея бота в дискорде такова, что при включении он меняет название голосового канала на количество участников на сервере, но он этого почему...

161
Перевод из String в Boolean [дубликат]

Перевод из String в Boolean [дубликат]

Как я могу перевести из STRING в Boolean:

74
вызов события change из метода для input

вызов события change из метода для input

Столкнулся с такой вот задачей - есть функция конструктор, InputElement() которая создает inputВ объекте есть два метода

158