PHP的MySQL检查供应商是否有3低连续评级

在我的软件评级表中,我有4个字段.
id自动递增
vid供应商ID
评级日期
给实际数字评分

在过去的几个月中,我已经做了很多事情,但是这次我很困惑,我无法清楚地知道最好的方法.我要尝试做的是找出供应商是否具有3个低的“连续”评级.如果他们的最后三个评分是< 3然后我要标记它们. 我已经玩了几个小时了,所以我想我会问(不是要回答),但是对于某些路径方向只是为了推动我前进,我陷入了这里的盘旋. 我已经尝试了GROUP BY和几个ORDER BY,但是这些尝试都进行不了,所以我想知道这是否不是mysql的答案,而是php的答案.换句话说,也许我只需要拿走我到目前为止所拥有的东西,然后通过usort之类将东西移到php端,就可以做到这一点.

这是我到目前为止所做的,一开始我也确实选择了id,这是获得最后一次奉献的最好方法,但是后来我取得了一点突破,如果他们连续有3个id没关系,所以我从查询中删除了它.

  $sql = "SELECT `rvid`, `rating` FROM `vendor_ratings_archive` WHERE `rating` <= '3' ORDER BY `rvid` DESC";

给我这个

Array
(
[0] => Array
    (
        [rvid] => 7
        [rating] => 2
    )

[1] => Array
    (
        [rvid] => 5
        [rating] => 1
    )

[2] => Array
    (
        [rvid] => 5
        [rating] => 0
    )

[3] => Array
    (
        [rvid] => 5
        [rating] => 3
    )

)

这只是我在田间扔掉的样本,这里只有4行,现场直播时将有数行.但这基本上告诉我,这些是表中评级较低的供应商.那就是我陷入困境的地方.我只能在查询中进行一种排序,所以这就是为什么我认为我需要将此并移到php端才能完成.

我认为我首先需要用rvid用php对元素进行排序,然后查看连续三个元素是否是同一供应商(rvid).

希望有道理.我的大脑很疼

更新-这是所有使用*的表数据

Array
(
[0] => Array
    (
        [id] => 7
        [rvid] => 7
        [ratedate] => 2016-05-01
        [rating] => 2
    )

[1] => Array
    (
        [id] => 8
        [rvid] => 5
        [ratedate] => 2016-05-01
        [rating] => 1
    )

[2] => Array
    (
        [id] => 6
        [rvid] => 5
        [ratedate] => 2016-05-01
        [rating] => 0
    )

[3] => Array
    (
        [id] => 5
        [rvid] => 5
        [ratedate] => 2016-05-01
        [rating] => 3
    )

)  

解决方法:

这是您可以开始解决此问题的一种方法-完全使用SQL:

>获得供应商的最新评级. ORDER BY日期DESC,上限1.
>获得供应商倒数第二的评级. ORDER BY日期DESC,限制1,偏移1.

然后编写一个查询,对前两个表进行LEFT联接.您将拥有一个包含三列的数据集:

>供应商ID
>最新评分
>倒数第二个评分

然后,您可以编写一个表达式,表示“如果column1 <3,而column2< 3,则此新列为true” 您应该能够相对容易地将其扩展到三列.

上一篇:php 实现二维码生成(支持任意php框架)


下一篇:go mod 生成 vendor