0

毎日更新されるユーザーのテーブルがあります。160 人ごとのユーザーを取得したいと考えています。

160 人または 320 人を超えるユーザーがいるかどうかを確認するためにカウントを行う必要があることはわかっているので、そのユーザーを削除できますが、この式はどのように機能しますか?

ユーザー数を 160 で割りますか?

しかし、160 番目または 320 番目のユーザーが必要かどうかはどうすればわかりますか?

このチェックは、すべてのユーザーがサインアップした後に行われるため、ユーザーがデータベースに追加されたら、それらが 160 の倍数であるかどうかを確認し、基本的にメールを送信する必要があります (データベース ユーザーは 165000 を超える可能性があります)。

4

6 に答える 6

3

160による除算が0に等しいかどうかを確認します

編集:次のような別のカウンターを使用して、160番目か320番目かを確認できます。

int counter1 = 0;
int counter2 = 0;
     if(counter1 % 160 == 0)
{
    counter2++;
     //DO SOMETHING 
}

今、counter2160人に1人ずつ育てられます。

于 2012-08-22T09:05:10.327 に答える
3

ユーザーテーブルに整数IDがある場合は、現在のユーザーのID以下のIDでユーザー数を取得してから、カウント%160==0を確認できます。

于 2012-08-22T09:05:51.833 に答える
2

データベースに自動インクリメント フィールドがある場合 (ほとんどのデータベースは主キーに対して自動インクリメントを行う傾向があります)、それをチェックするクエリを実行できますuserID % 160 == 0。これは、0 番目のユーザーから始まる 160 番目のユーザーごとに返されます。

次に、アプリケーションでuserId / 160、0 番目のユーザー、160 番目のユーザー、320 番目のユーザーなどを確認できます。

于 2012-08-22T09:07:11.963 に答える
0

大量のデータをスキャンする場合(dbユーザーは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には電子メールを送信する機能があるため、クライアントが関与しなくてもこの機能を使用できる可能性があることにも注意してください。

于 2012-08-22T09:24:55.997 に答える
0

ユーザーが 160 番目かどうかを知る簡単な方法があります。

if (userCount % 160 == 0)
        {
            //User is 160th user, or 320, 480 etc...
        }

これは、ユーザーが小数なしで 160 で割り切れるかどうかを検証します。モジュロに関する詳細情報: http://www.dotnetperls.com/modulo

于 2012-08-22T09:08:01.947 に答える
0

の線に沿った何か

for (int i = 1; i < (int)(users.Count/160); i++)
{
    newUsers.Add(users[160 * i]);
}

...これは、リストを使用することを前提としていますが、あなたは言っていません。「db」には、同じことを達成するための同様のメソッドが必要です。

これにより、160 番目、320 番目などのユーザーが返されます。

于 2012-08-22T09:12:59.013 に答える