在我的软件评级表中,我有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” 您应该能够相对容易地将其扩展到三列.