2012-01-23 6 views
0

У меня есть две таблицы:MySQL присоединяется к null?

продукта:

id | sku 
0 P323 
1 K534 

Перевод:

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

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

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

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

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

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

ответ

5

Если оба перевода отсутствуют имя является дисплей, как 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 для лучшего perfromance

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' 
+2

[ 'coalesce'] (HTTP : //dev.mysql.com/doc/refman/5.5/en/comparison-operators.html#function_coalesce) будет лучшим выбором, чем 'isnull'. –

+0

@muistooshort Для двух полей, не работает ли 'IFNULL'? – xdazz

+0

Вы правы для производительности, но 'ifnull' является более _readable_ и более понятным для понимания. – rauschen

Смежные вопросы