【发布时间】:2016-08-26 19:48:47
【问题描述】:
在我的软件评分表中,我有 4 个字段。 id 自动递增 rvid 供应商 ID 评级日期 评分实际数值评分
在过去的几个月里,我已经做了很多,但这次我很难过,我无法清楚地知道最好的方法。我想要做的是找出供应商是否有 3 个低“连续”评级。如果他们的最后三个评分小于 3,那么我想标记他们。
我已经玩了几个小时了,所以我想我会问(不是为了答案),但是为了一些路径方向只是为了推动我前进,我在这里陷入了思考。
我已经尝试过 GROUP BY 和几个 ORDER BY 但这些尝试并不顺利,所以我想知道这是否不是 mysql 答案而是 php 答案。换句话说,也许我只需要采取我目前所拥有的,然后通过 usort 等移动到 php 方面并这样做。
到目前为止,我确实选择了 id,起初我认为这是获得最后一个 consective 的最佳方式,但后来我有了一个小突破,如果他们连续 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 端来完成它。
我想我需要先用 php 按 rvid 对元素进行排序,然后查看一行中的三个元素是否是同一个供应商 (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
)
)
【问题讨论】: