我正在尝试清理现有的产品数据库。我有以下表格:
表
<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,“搅拌器”,“厨房家”)等......
答案 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