У меня есть таблица MySQL с переводами. Теперь я ищу запрос, который возвращает мне первый перевод, соответствующий заданному списку языков:
Допустим, доступно 4 перевода строки:
id lang translation
--------------------------------
greeting en hey!
greeting de Hallo.
greeting de_at Servus!
greeting de_ch Grüezi
Желаемый результат запроса в зависимости от заданного списка языков:
language list result
-----------------------
de,en Hallo.
en,de hey!
de_at,de,en Servus!
Возможно ли это в одном запросе?
1
stofl
27 Авг 2011 в 15:05
2 ответа
Лучший ответ
SELECT COALESCE( de_at.translation, de.translation, en.translation )
FROM (SELECT 'greeting' AS id) AS id
LEFT JOIN translations AS de_at ON( de_at.lang = 'de_at' AND id.id = de_at.id )
LEFT JOIN translations AS de ON( de.lang = 'de' AND id.id = de.id )
LEFT JOIN translations AS en ON( en.lang = 'en' AND id.id = en.id )
Я должен отдать должное Эдди за этот метод.
1
Community
23 Май 2017 в 11:51
Попробуй это:
SELECT * FROM translations t WHERE id = 'greeting' AND lang IN ('de_at', 'de', 'en') ORDER BY FIELD(lang, 'de_at', 'de', 'en') LIMIT 1
1
pulsar
27 Авг 2011 в 11:18
Похожие вопросы
Связанные вопросы
Новые вопросы
mysql
MySQL - это бесплатная система управления реляционными базами данных с открытым исходным кодом (RDBMS), использующая язык структурированных запросов (SQL). НЕ ИСПОЛЬЗУЙТЕ этот тег для других БД, таких как SQL Server, SQLite и т. Д. Это разные БД, которые все используют свои собственные диалекты SQL для управления данными.