次のスニペットは、MySQL 変数トリックを使用して、CID ごとに各行に番号を割り当てます。例を単純にするために、返される行の量を CID ごとに 2 に制限しました。
select cid
, qid
, text
from (
select if(@last_cid = cid, @rn := @rn + 1, @rn := 1) as rn
, (@last_cid := cid)
, cid
, qid
, text
from YourTable yt
cross join
(select @rn := 0, @last_cid := -1) r
) as SubQueryAlias
where rn < 3;
データ設定:
create table YourTable (QID int, TEXT varchar(50), CID int);
insert YourTable values
(1, 'hi', 1),
(1, 'hi', 1),
(2, 'hi', 1),
(2, 'hi', 1),
(3, 'hi', 2),
(4, 'hi', 2),
(4, 'hi', 2),
(5, 'hi', 3);
これにより、CID ごとに最大 2 行が返されます。
+------+------+------+
| cid | qid | text |
+------+------+------+
| 1 | 1 | hi |
| 1 | 1 | hi |
| 2 | 3 | hi |
| 2 | 4 | hi |
| 3 | 5 | hi |
+------+------+------+