2014-02-17 2 views
0

Я работаю над существующей базой данных продуктов, пытаясь очистить вещи. У меня есть следующие таблицы:Как объединить выражения выбора для всех значений во многих таблицах

Столы

<products> id, title 
<keywords> id, title 
<product_has_keyword> product_id, keyword_id 

Когда я хочу, чтобы создать список продуктов, я использую код:

SELECT * FROM products; 

А потом для каждого продукта:

SELECT k.title FROM keywords k, product_has_keyword phk WHERE k.id = phk.keyword_id AND phk.id = ? 

Как сменить этот код на один SELECT, который, возможно, вернет продукты в дополнение к ключевым словам (отделить ated пробелами), как «id, title, keywords»?

Такие, как (1, "молот", "инструмент домой рука"), (2, "блендер", "кухня дом") и т.д ...

ответ

1

Вы можете использовать GROUP_CONCAT, но быть в курсе что он имеет предел характера для группы

SELECT p.id, p.title ,GROUP_CONCAT(k.title SEPARATOR ' ') `keywords` 
FROM 
products p 
LEFT JOIN product_has_keyword phk ON(p.id = phk.product_id) 
LEFT JOIN keywords k ON (k.id = phk.keyword_id) 
WHERE phk.id = ? 
GROUP BY p.id 
Смежные вопросы