首先抱歉英语不好! 两个我有一个表有许多记录> 5000与以下结构
id | uid | uam(user after me) | plan
-------------------------------------
1 | 4 | 4 | 1
-------------------------------------
2 | 4 | 3 | 2
-------------------------------------
3 | 4 | 1 | 2
-------------------------------------
4 | 4 | 9 | 1
-------------------------------------
5 | 4 | 6 | 1
-------------------------------------
6 | 4 | 2 | 2
-------------------------------------
7 | 4 | 1 | 1
-------------------------------------
8 | 4 | 3 | 2
-------------------------------------
现在我想从下表中选择if / condition
选择uam(用户跟在我后面)的行< =计算此行后的行数。换句话说,我们希望用户在达到uam数量后拥有相同的计划和用户数。
此示例表的应为返回ID:2,3
我如何用sql或更好的codeigniter活动记录来做到这一点? 谢谢你的帮助:)
答案 0 :(得分:1)
对于每条记录,您需要检查后续记录是否可以总计大于或等于该特定记录的uam
的数量。
在EXISTS
的帮助下,您可以实现这一目标:
SELECT
*
FROM uamtable A
WHERE EXISTS (
SELECT
1
FROM uamtable B
WHERE A.ID < B.ID AND A.plan = B.plan
HAVING COUNT(*) >= A.uam
)
注意:强>
A.ID < B.ID
约束强制执行只有后续记录将被计为具有相同计划。