在 while 循环中排序问题

我 spo

我有一个奇怪的问题发生。我有一张表格,我想在其中订购产品的销售次数。我会发布查询,但问题出在 while 循环中。

询问:

$cat = $db->query("SELECT *, COUNT(id_produto) as quantos FROM produtos p JOIN pedidos m ON p.id_prod = m.id_produto GROUP BY id_produto ORDER BY quantos +0 DESC");
$cat->execute();

现在循环:

while($res_cat = $cat->fetch(PDO::FETCH_ASSOC)){
$quantidade_ok = $res_cat['quantos'] * $res_cat['qtde'];
$quanti = array($quantidade_ok);
rsort($quanti);
foreach($quanti as $ord){
echo $ord."<br>";
}

输出为:40 50 4 1 3 2 10

但我希望它是:50 40 10 4 3 2 1

我会很乐意提供任何帮助。

安德里亚·奥利瓦托

您在循环内进行排序(因此您的排序已经发生),并且您正在对只有 1 个 value 的数组进行$quanti排序,因此您的排序什么也不做。

您有 2 种方法可以正确处理此问题:编辑您的查询以实际按照您希望的方式排序,或者在循环之前对 PHP 数组进行排序。

选项 1:编辑查询

基于您的代码似乎很清楚,你希望通过对产品进行排序quantosqtde因此,您可以简单地编辑您的查询,如下所示:

SELECT *, COUNT(id_produto) as quantos 
FROM produtos p JOIN pedidos m ON p.id_prod = m.id_produto 
GROUP BY id_produto 
ORDER BY (quantos*qtde) DESC

选项 2:通过 PHP 排序

如果您PHP因为不想更改查询而更喜欢排序,则可以简单地填充一个临时数组,将quantos时间的乘积qtde作为键,然后用于krsort对数组进行排序。

在代码中:

$array = [];
while ($res_cat = $cat->fetch(PDO::FETCH_ASSOC)) {
    $key = $res_cat['quantos'] * $res_cat['qtde'];
    $array[$key] = $res_cat;
}
krsort($array);
foreach ($array as $ord => $res_cat) {
    echo $ord."<br>";
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章