どういうわけかこの機能が必要ですが、MySQL は現時点ではサポートしていません。
私はGROUP_CONCAT(CONCAT(...))
xmlのようなものを生成するために使用しています。
しかし、サイズが制限を超えると、xml が壊れてしまいます!
だから私はどうにかして5行だけを取得する必要があります!
どういうわけかこの機能が必要ですが、MySQL は現時点ではサポートしていません。
私はGROUP_CONCAT(CONCAT(...))
xmlのようなものを生成するために使用しています。
しかし、サイズが制限を超えると、xml が壊れてしまいます!
だから私はどうにかして5行だけを取得する必要があります!
を使用してこれを回避しましたSUBSTRING_INDEX
。
例えば:
SELECT SUBSTRING_INDEX(GROUP_CONCAT(Field1 SEPARATOR ','), ',', [# of elements to return])
FROM Table1;
チャールズの答えの例:
基本:
SELECT GROUP_CONCAT( field ) FROM ( SELECT field FROM table LIMIT 200 )
拡張:
CASTは、結果がバッファーによって切り捨てられる場合に役立ちます。
SELECT CAST( GROUP_CONCAT( field ) AS CHAR(2048) ) FROM ( SELECT field FROM table LIMIT 200 )
あなたの質問に対する答えではありませんが、GROUP_CONCAT() で LIMIT 句を使用したい他の人への参照:
機能要求はずっと前に MySql 開発者に提出されました。まだ実装されていません :-(
結果を制限するために一時テーブル/サブクエリを使用しますか? あなたのクエリを見なければ、そのルートについて確かなアドバイスをするのは難しいでしょう.
ただし、group_concat_max_len
設定の方が便利な場合があります。GROUP_CONCAT
文字列の長さで、操作の最大長を制御します。GROUP_CONCAT
結果を制限する余裕がない場合は、壊れた s を防ぐために値を上げます。
ユーザー変数を使用して分割された row_number をシミュレートし、行を制限して group_concat を適用できます。
次の表を検討してください。
create table your_table (
id int primary key autoincrement,
category int,
value int
);
およびデータ:
insert into your_table (category, value)
values
(1, 1), (1, 2), (1, 3), (1, 4), (1, 5),
(2, 6), (2, 7), (2, 8), (2, 9), (2, 10),
(3, 11), (3, 12), (3, 13), (3, 14), (3, 15);
そして、連結されたカテゴリごとに上位 3 つの値 (最新の ID 順) が必要です。
select category,
group_concat(value order by id desc) as value_con
from (
select t.*,
@rn := if(@category = category, @rn + 1, if(@category := category,1, 1)) as seqnum
from your_table t
cross join (select @category := null, @rn := 0) x
order by t.category, t.id desc
) t
where seqnum <= 3
group by category;
出力:
category value_con
1 5,4,3
2 10,9,8
3 15,14,13
これはこれのデモです。