2015-01-02 4 views
1

возможно решить эту задачу лучше?MySQL несколько значений присоединяются к одной таблице - лучший запрос?

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

1) z_import_kategorie 
id - kategorieHOME - kategoriePP - kategorieP 
1 - 2    - 3   - 5 
2 - 2    - 4   - 8 
3 - 2    - 6   - 7 

2) tm_category_lang 
id_category - name - lang_id 
2   - HOME - 1 
2   - Uvod - 2 
3   - Bikes - 1 
3   - Kola - 2 
4   - Windows - 1 
4   - Okna - 2 
5   - Cars - 1 
5   - Auta - 2 
6   - Wheels - 1 
6   - Disky - 2 
7   - Lights - 1 
7   - Svetla - 2 
8   - Doors - 1 
8   - Dvere - 2 

мне нужно присоединиться к kategorieHOME, kategoriePP и kategorieP из таблицы z_import_kategorie к категории имя из таблицы tm_category_lang в одном запросе.

Мой запрос для этого:

SELECT z.*,k1.name AS katHOME,k2.name AS katPP,k3.name AS katP 
FROM z_import_kategorie AS z 
LEFT JOIN tm_category_lang AS k1 ON(k1.id_category = z.kategorieHOME) 
LEFT JOIN tm_category_lang AS k2 ON(k2.id_category = z.kategoriePP) 
LEFT JOIN tm_category_lang AS k3 ON(k3.id_category = z.kategorieP) 
GROUP BY z.id 
ORDER BY z.id ASC 

RESULT of query is: 

1 - HOME - Bikes - Cars 
2 - HOME - Windows - Doors 
3 - HOME - Wheels - Lights 

Возможен дизайн этот запрос лучше? Мой запрос работает, но я не думаю, что это хорошо.

спасибо.

+2

Что точка groupping, если вы не используете aggreagation операции? – Uriil

+1

Нет простого способа написать это. Это правильный путь, за исключением того, что вам не нужна команда GROUP BY. – Barmar

ответ

1

В вашем запросе не нужно использовать GROUP BY, чтобы получить имена категорий, чтобы удалить их, тогда ваш запрос будет работать.

Попробуйте это:

SELECT z.*, k1.name AS katHOME, k2.name AS katPP, k3.name AS katP 
FROM z_import_kategorie AS z 
LEFT JOIN tm_category_lang AS k1 ON k1.id_category = z.kategorieHOME AND k1.lang_id = 1 
LEFT JOIN tm_category_lang AS k2 ON k2.id_category = z.kategoriePP AND k2.lang_id = 1 
LEFT JOIN tm_category_lang AS k3 ON k3.id_category = z.kategorieP AND k3.lang_id = 1 
ORDER BY z.id ASC 
+0

Мне нужна GROUP BY, потому что для каждого названия категории (same category_id) существуют имена на двух языках, и результат дублируется номерами соединения из второй таблицы. – David

+1

Я думаю, что ваше решение лучше. Спасибо :) – David

+0

@David Вы очень желанны ... Если вы найдете правильный ответ, тогда вы можете принять этот ответ. –