2016-05-24 72 views
1

我有這樣的模式:MYSQL列出所有產品的所有類別

table_products:PRODUCT_ID,名稱,價格,

table_categories:CATEGORY_ID,名稱,

table_categories_products:CATEGORY_ID ,product_id

我想列出我的分貝的所有產品,包括所有每種產品的類別。

其實我使用這個查詢:

SELECT p.id, p.name, p.price, GROUP_CONCAT(c.category_id, ';', c.name SEPARATOR ',') 
FROM table_products 
LEFT JOIN table_categories_products tcp ON tcp.product_id=p.product_id 
LEFT JOIN table_categories c ON c.category_id=p.product_id 
GROUP BY p.id 

的問題是,一個產品可能是無限的類別內,GROUP_CONCAT具有大小限制。

更新

我已經考慮增加 「group_concat_max_len」 的選項,但dont't允許無限串

+0

您可以爲當前會話q.v增加「GROUP_CONCAT」的限制。 [這裏](http://stackoverflow.com/questions/2567000/mysql-and-group-concat-maximum-length)。但是,如果你期望一個無限的字符串,那麼你應該改變你的查詢。 –

回答

2

您可以通過改變GROUP_CONCAT最大尺寸:

SET [GLOBAL | SESSION] group_concat_max_len = val; 

默認爲1024,最大可設置值爲1073741824

至少這是什麼doc sa ys: http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html#function_group-concat

+0

我已經考慮過這個選項,但是不允許有無限的字符串 – Algoleigol

+0

這是真的,但是在特定情況下,如果我們有很多類別,我們不能將它們寫入一行文本中,那麼我們可以懷疑那些數據不好。 其他方法是選擇所有關係並將它們從SQL中進行連接。 – mjpolak

相關問題