我有一个奇怪的问题发生。我有一张表格,我想在其中订购产品的销售次数。我会发布查询,但问题出在 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 数组进行排序。
基于您的代码似乎很清楚,你希望通过对产品进行排序quantos
倍qtde
。因此,您可以简单地编辑您的查询,如下所示:
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
如果您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] 删除。
我来说两句