0

最初の 10 レコードで 5 つ以上の連続したレコードを特定する必要がある状況があります。以下に2つの例を示します。

例 1 以下のとおり

SL  User       Number   Frequency
1   aaa         9.95    1
2   aaa         9.85    1
3   aaa         9.75    1
4   aaa         9.65    1
5   aaa         9.55    1
6   aaa         9.45    1
7   xxxx        9.35    1
8   bbbb        9.25    1
9   cccc        9.15    1

レコード 5 と 6 (ユーザー aaa に属し、頻度を 1 ではなく 2 として更新する番号 9.55 と 9.45) を取得できるクエリが必要です。

例 2 次のように

SL  User    Number  Frequency
1   xxxx     9.95   1
2   aaa      9.85   1
3   aaa      9.75   1
4   aaa      9.65   1
5   aaa      9.55   1
6   aaa      9.45   1
7   xxxx     9.35   1
8   bbbb     9.25   1
9   cccc     9.15   1

クエリは、レコード 6 (ユーザー aaa に属し、頻度を 1 ではなく 2 に更新する番号 9.45) のみを取得する必要があります。

クエリは、ユーザーの上位 9 位のどこかに 5 つ以上の連続したレコードが表示されるレコードを選択し、4 位以降の位置の頻度を 2 としてマークする必要があります。

制約: このクエリは、PHP の ajax を介して 2 秒ごとに実行されます。したがって、多くのCPUを使用する複雑な結合/結合クエリは本当に必要ありません。2つ以上の小さなクエリに分割することでphpでこれを行うオプションがありますが、CPUまたはデータベースをロードしない単一のクエリを好みます。単一のクエリが CPU をロードする可能性が高い場合、php で処理が行われるため、2 ~ 3 つのクエリで問題ありません。

これを達成する方法を教えてください。

4

1 に答える 1

1

最初の 10 レコードのみの場合、PHP ソリューションはそれほど消費しないはずです..

$arr= mysql result arrays;
$old_user="";
$count=0;
foreach ($arr as $a){
    if ($a['name']==$old_user){
       $count++;
    }else{
       $count=0;
    }
    if ($count > 4) {
        // run the update query here

    }
    $old_user=$a['name'];
}

必要に応じて機能するかどうかを確認してください。

于 2012-09-04T20:20:39.073 に答える