以下片段使用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两行:
+------+------+------+
| cid | qid | text |
+------+------+------+
| 1 | 1 | hi |
| 1 | 1 | hi |
| 2 | 3 | hi |
| 2 | 4 | hi |
| 3 | 5 | hi |
+------+------+------+
还有什么你从 “已经准备串$ CID” 有分开? – Havelock
Whay我所做的是“SELECT * FROM questions q1 WHERE cid =(SELECT cid FROM questions q2 WHERE q2.cid IN($ cids)Group BY q2.cid)ORDER BY q1.qid LIMIT 3”,但是这不会上班。 – nickbusted
我收到以下错误:“#1242 - 子查询返回多于一行” – nickbusted