MySQL присоединиться к нулю? - PullRequest
0 голосов
/ 23 января 2012

У меня есть две таблицы:

Продукт:

id | sku
0    P323
1    K534

Перевод:

product_id | lang | name
0            en     Some product
0            sl     Nek izdelek
1            en     Some other product

Теперь мне нужно отобразить словенский (sl) перевод, ноесли он не существует, должен отображаться английский.

Я ищу способ получить продукты, где результат будет следующим:

id | sku  | name
0    P323   Nek izdelek
1    K534   Some other product

Возможно ли это с MySQL, с одним запросом?

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

РЕДАКТИРОВАТЬ по запросу:У меня должна быть опция, позволяющая привилегированному внутреннему пользователю создавать столько текстовых полей, сколько требуется для интернет-магазина для отображения продукта (например, краткое описание, что в упаковке, информация о гарантии ...).Поэтому я бы не стал жестко кодировать имена столбцов в запросе SQL, так как это уменьшает переносимость.
Мне нужно было бы выбрать все поля перевода без указания имен столбцов, как в «translation. *».
Если практического решения нетнайдено, я прибегну к ведению записи пользовательских столбцов, которые добавляются при построении запроса (до его выполнения).

1 Ответ

5 голосов
/ 23 января 2012

Если оба перевода отсутствуют, имя отображается как NULL

SELECT p.id, sku, IFNULL(tr.name,en.name) as name
FROM product p
LEFT JOIN translation en ON p.id = en.product_id and en.lang = 'en'
LEFT JOIN translation tr ON p.id = tr.product_id and tr.lang = 'sl'

см. Также документы для IFNULL

ИЛИ с COALESCE длялучшее исполнение

SELECT p.id, sku, COALESCE(tr.name,en.name) as name
FROM product p
LEFT JOIN translation en ON p.id = en.product_id and en.lang = 'en'
LEFT JOIN translation tr ON p.id = tr.product_id and tr.lang = 'sl'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...