7

どういうわけかこの機能が必要ですが、MySQL は現時点ではサポートしていません。

私はGROUP_CONCAT(CONCAT(...))xmlのようなものを生成するために使用しています。

しかし、サイズが制限を超えると、xml が壊れてしまいます!

だから私はどうにかして5行だけを取得する必要があります!

4

6 に答える 6

20

を使用してこれを回避しましたSUBSTRING_INDEX

例えば:

SELECT SUBSTRING_INDEX(GROUP_CONCAT(Field1 SEPARATOR ','), ',', [# of elements to return])
FROM Table1;
于 2012-06-11T20:15:28.030 に答える
5

チャールズの答えの例:

基本:

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 )
于 2012-01-05T11:43:20.073 に答える
4

あなたの質問に対する答えではありませんが、GROUP_CONCAT() で LIMIT 句を使用したい他の人への参照:

機能要求はずっと前に MySql 開発者に提出されました。まだ実装されていません :-(

于 2010-05-05T12:23:22.953 に答える
2

結果を制限するために一時テーブル/サブクエリを使用しますか? あなたのクエリを見なければ、そのルートについて確かなアドバイスをするのは難しいでしょう.

ただし、group_concat_max_len設定の方が便利な場合があります。GROUP_CONCAT文字列の長さで、操作の最大長を制御します。GROUP_CONCAT結果を制限する余裕がない場合は、壊れた s を防ぐために値を上げます。

于 2009-10-06T06:38:19.743 に答える
2

ユーザー変数を使用して分割された 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

これはこれのデモです。

于 2017-05-13T07:59:32.213 に答える