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 的数字 9.55 和 9.45 并将频率更新为 2 而不是 1)的查询。

示例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 的编号 9.45,并且更新频率为 2 而不是 1)。

查询应选取用户前 9 个位置的任意位置出现 5 个或更多连续记录的记录,并将第 4 个位置之后的位置的频率标记为 2。

约束:此查询通过 php.ini 中的 ajax 每 2 秒执行一次。所以我真的不想要一个使用大量cpu的复杂连接/联合查询。我可以选择在 php 中执行此操作,将其分解为 2 个或更多较小的查询,但更喜欢不加载 cpu 或数据库的单个查询。如果单个查询可能会加载 cpu,我可以使用 2-3 个查询,因为处理发生在 php.ini 中。

您能否告知如何实现这一目标?

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 回答