web-dev-qa-db-ja.com

MySQLとGROUP_CONCAT()の最大長

私はMySQLクエリでGROUP_CONCAT()を使って複数の行を単一の文字列に変換しています。ただし、この関数の結果の最大長は1024文字です。

この制限を増やすためにgroup_concat_max_lenパラメータを変更できることを私はよく知っています。

SET SESSION group_concat_max_len = 1000000;

ただし、使用しているサーバーでは、パラメータを変更することはできません。上記のクエリを使用したり、設定ファイルを編集したりしないでください。

だから私の質問は:単一の文字列に複数行のクエリの出力を取得する他の方法はありますか?

226
ZeWaren
CREATE TABLE some_table (
  field1 int(11) NOT NULL AUTO_INCREMENT,
  field2 varchar(10) NOT NULL,
  field3 varchar(10) NOT NULL,
  PRIMARY KEY (`field1`)
);

INSERT INTO `some_table` (field1, field2, field3) VALUES
(1, 'text one', 'foo'),
(2, 'text two', 'bar'),
(3, 'text three', 'data'),
(4, 'text four', 'magic');

この問い合わせは少し奇妙ですが、変数を初期化するために別の問い合わせを必要としません。さらに複雑なクエリに埋め込むこともできます。セミコロンで区切られたすべての 'field2'を返します。

SELECT result
FROM   (SELECT @result := '',
               (SELECT result
                FROM   (SELECT @result := CONCAT_WS(';', @result, field2) AS result,
                               LENGTH(@result)                            AS blength
                        FROM   some_table
                        ORDER  BY blength DESC
                        LIMIT  1) AS sub1) AS result) AS sub2; 
2
ZeWaren
SET SESSION group_concat_max_len = 1000000;

一時的なセッションスコープの設定です。これは現在のセッションにのみ適用されます。このように使用してください。

SET SESSION group_concat_max_len = 1000000;
select group_concat(column) from table group by column

共有ホスティングでもこれを実行できますが、他のセッションを使用するときはSET SESSIONコマンドを繰り返す必要があります。

316
keatkeat

最大長を設定するための正しいパラメーターは次のとおりです。

SET @@group_concat_max_len = value_numeric;

value_numericは1024以上でなければなりません。デフォルトでは、group_concat_max_lenの値は1024です。

54
oscar

Xampp my.ini構成ファイルにこの設定を含めます。

[mysqld]
group_concat_max_len = 1000000

それからxampp mysqlを再起動します。

あなたはこれを試すことができます

SET GLOBAL group_concat_max_len = 1000000;
6

正しい構文はmysql> SET @@global.group_concat_max_len = integer;です。
データベースが存在するサーバーでこれを実行する権限がない場合は、次のようなクエリを使用してください。
mySQL = "SET @@session.group_concat_max_len = 10000;"または別の値。
次の行
SET objRS = objConn.Execute(mySQL)あなたの変数は異なるかもしれません。
その後
mySQL="SELECT GROUP_CONCAT(......);" etc
デフォルト値の1024をグローバルに変更する権限がないため(cPanelを使用)、最後のバージョンを使用します。
お役に立てれば。

4
Ola Balstad