Mysql — как осуществить выборку предпочтительной записи?

Здравствуйте. У меня есть таблица `brands` с полями id, lang, data
Для мультиязычности создается запись с одинаковыми id, но разными lang.
Для отображения в списке на русском языке мы делаем простую выборку, где lang = 'ru'. Но для непереведенных нужно показать на любом другом языке.

Мне пришло в голову сделать с подзапросом, но для большего количества записей это не годится.
SELECT * FROM (SELECT * FROM `brands` ORDER BY lang = 'ru' DESC) as ORDERED_TABLE
  GROUP BY id


В подзапросе я использовал ORDER BY lang = 'ru' DESC, что делает записи с lang = 'ru' первыми
Есть ли какой-то более оптимальный и быстрый вариант?
  • Вопрос задан
  • 2467 просмотров
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Сделайте поле `lang` не VARCHAR, а ENUM, тогда сортировка ORDER BY `lang` будет в порядке определения этого ENUM'а.
Ответ написан
Kerman
@Kerman
SELECT DISTINCT(`id`), `lang`, `data` FROM `brands` ORDER BY lang = 'ru' DESC


А лучше сделайте вспомогательную табличку с unique id, которые переведены на русский. А чтобы табличка была актуальна, можно повесить триггер на INSERT основной таблички.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы