我每天都会更新一张用户表 - 我希望每 160 个用户都有。
我知道我需要进行计数以查看是否有超过 160 或 320 个用户,这样我就可以将那个用户排除在外,但是这个公式将如何工作?
我是否将用户数除以 160?
但是我怎么知道它是需要第 160 位用户还是第 320 位用户呢?
此检查将在每个用户注册后进行,因此一旦将用户添加到数据库中,我需要查看它们是否是 160 的倍数,然后基本上向他们发送电子邮件(数据库用户可以超过 165000)。
我每天都会更新一张用户表 - 我希望每 160 个用户都有。
我知道我需要进行计数以查看是否有超过 160 或 320 个用户,这样我就可以将那个用户排除在外,但是这个公式将如何工作?
我是否将用户数除以 160?
但是我怎么知道它是需要第 160 位用户还是第 320 位用户呢?
此检查将在每个用户注册后进行,因此一旦将用户添加到数据库中,我需要查看它们是否是 160 的倍数,然后基本上向他们发送电子邮件(数据库用户可以超过 165000)。
检查除以 160 是否等于 0
编辑:您可以通过使用像这样的另一个计数器来检查它是第 160 位还是第 320 位:
int counter1 = 0;
int counter2 = 0;
if(counter1 % 160 == 0)
{
counter2++;
//DO SOMETHING
}
现在,counter2
每 160 人就会养 1 人。
如果您的 users 表有整数 id,您可以获取 id 低于或等于当前用户 id 的用户数,然后检查 count % 160 == 0。
如果您的数据库有一个自动递增的字段(大多数数据库倾向于对其主键执行此操作),您可以执行一个查询来检查userID % 160 == 0
. 这应该从第 0 个用户开始,每 160 个用户返回一次。
然后,在您的应用程序中,您可以userId / 160
查看第 0 个用户、第 160 个用户、第 320 个用户等。
有一个简单的方法可以知道用户是否是第 160 位。
if (userCount % 160 == 0)
{
//User is 160th user, or 320, 480 etc...
}
这将验证用户是否可被 160 整除且没有小数。有关模的更多信息:http: //www.dotnetperls.com/modulo
类似的东西
for (int i = 1; i < (int)(users.Count/160); i++)
{
newUsers.Add(users[160 * i]);
}
...这是假设您使用列表,但您没有说过。你的“db”应该有类似的方法来完成同样的事情。
这将返回第 160、第 320 等用户。
假设您要扫描大量数据(db users 可以超过 165000),首先查询所有用户,然后在客户端过滤它们可能不是一个好主意。
更好地在您的数据库中处理此问题,如下所示:
SELECT R, userid FROM
(SELECT ROWNUM R, userid FROM (SELECT userid FROM users ORDER BY userid ))
WHERE MOD(R, 160) = 0
(这个例子是针对 Oracle 的,可能有更有效的方法来查询这个)
旁注:
由于您没有提供更多信息(您使用的数据库、表格布局等),因此很难找到更好的答案。另请注意,例如 Sql Server 具有发送电子邮件的能力,因此您可能可以在不涉及客户端的情况下使用此功能。