如何在多对多表中为所有值组合select语句

时间:2014-02-17 20:26:02

标签: php mysql select

我正在尝试清理现有的产品数据库。我有以下表格:

<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,除了关键字(用空格分隔)之外,还可以返回产品,例如“id,title,keywords”?

如(1,“锤子”,“工具家手”),(2,“搅拌器”,“厨房家”)等......

1 个答案:

答案 0 :(得分: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