mysql查询以查找范围内具有5个或更多连续记录的行

时间:2012-09-04 19:56:46

标签: php mysql

我有一种情况,我必须在前10个记录中识别5个或更多连续记录。我在下面给出了两个例子:

示例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(编号9.55和9.45属于用户aaa并将频率更新为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)。

查询应该记录5个或更多连续记录出现在用户前9个位置的记录,并将频率标记为2,表示第4个位置后的位置。

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

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

1 个答案:

答案 0 :(得分: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'];
}

看看它是否适合你的需要。