2016-05-24 9 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

それは事実ですが、与えられた場合、1行のテキストに書き込めないカテゴリが非常に多い場合、それらのデータは悪いことです。 他の方法は、すべてのリレーションを選択し、それらをSQLから連結することです。 – mjpolak

関連する問題