У меня есть SQL-запрос, в котором есть немецкий и английский перевод имени. На основе пользовательских настроек и существующих данных для перевода я хочу определить вывод SQL-запроса. В моем примере CASE для выбора языка на основе пользовательских настроек работает, но вторая функция CASE не работает, потому что она не знает определения из первой функции CASE.
Я работаю над XAMPP v3.2.4/версия сервера: 10.4.11-MariaDB
Вот моя попытка:
SELECT questionaire.quest_name_de, questionaire.quest_name_en,
# CASE 1: check what language settings the user haves selected
CASE :language WHEN 'de' THEN questionaire.quest_name_de ELSE questionaire.quest_name_en END AS quest_name_translation,
# CASE 2: if the output is empty take german translation which is never empty
CASE quest_name_translation WHEN '' THEN questionaire.quest_name_de ELSE quest_name_translation END AS quest_name_final
FROM questionaire
Мой желаемый результат выглядит следующим образом:
Настройки языка пользователя — английский, поэтому первая функция CASE в моем запросе выберет «questionaire.quest_name_en». Далее вторая функция CASE проверит, не пусты ли данные для 'quest_name_translation'. Если он пуст, выберите «questionaire.quest_name_de». Моя проблема в том, что второй СЛУЧАЙ не знает «quest_name_translation» из первого СЛУЧАЯ. этот способ невозможен?
1 ответ
Используйте AND
для объединения условий. Только если английский язык запрошен и английский доступен, вы покажете английский текст, в противном случае немецкий:
SELECT
questionaire.quest_name_de,
questionaire.quest_name_en,
CASE WHEN :language = 'en' AND quest_name_en <> '' AND quest_name_en IS NOT NULL
THEN quest_name_en
ELSE quest_name_de
END AS quest_name_final
FROM questionaire;
COALESCE()
было бы проще.
quest_name_en <> ''
уже исключает NULL. Так что нет, quest_name_en IS NOT NULL
не нужен.
COALESCE
, элегантно проверяющее запрошенный язык и учитывающее как null, так и пустую строку?
Похожие вопросы
Новые вопросы
sql
Язык структурированных запросов (SQL) - это язык запросов к базам данных. Вопросы должны включать примеры кода, структуру таблицы, примеры данных и тег для используемой реализации СУБД (например, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 и т. Д.). Если ваш вопрос относится исключительно к конкретной СУБД (использует определенные расширения / функции), используйте вместо этого тег этой СУБД. Ответы на вопросы, помеченные SQL, должны использовать стандарт ISO / IEC SQL.
$statement = $pdo->prepare
- это, например, PHP. SQL начинается сSELECT
. Диалекты SQL различаются, и то, что работает в одной СУБД, может не работать в другой. Поэтому всегда помечайте ваши SQL-запросы тегом используемой СУБД. И в идеале вы также сообщите нам версию, потому что это тоже может иметь значение.