显示数据从最高值排序

时间:2017-08-09 17:12:12

标签: mysql

我有一些具有某些条件的商品价格表。在这里,我尝试显示从类别和价格中分类的商品数量。

代码段:

<?php
    include_once 'db.php';

    $price = 'Price : $10';
    $sql = $DBcon->query("SELECT DISTINCT category FROM mytable WHERE article LIKE '%{$price}%' LIMIT 10");

    while ($Row = $sql->fetch_array()) {
    $category = "PROMO";
    $Total = $DBcon->query("SELECT title FROM mytable WHERE article LIKE '%{$price}%' AND category='".$category."'");
    $item = $Total->num_rows;

    echo "<li><a href='/tag/". $category ."'>". $category ."</a> (" . $item . " item)</li>";
        }
?>

上面的代码对我来说效果很好,但是有一个问题。

数据库上的实际数据是:

  • 衣服:23件
  • 裤子:19件
  • 夹克:4件
  • 衬衫:11件
  • 手袋:7件
  • 然后..

我想根据最多的项目显示类别。但上面的脚本代码的结果随机显示。即使是大多数物品有时也不会出现。

我知道我的代码有问题,但不知道如何修复它。请帮帮我。

2 个答案:

答案 0 :(得分:1)

PHP不太好,但为什么不一次查询所有数据(假设分类不多),如下:

SELECT category, count(1) as counter FROM mytable WHERE article LIKE '%{$price}%' group by category order by counter

如果你有很多类别,你可以使用LIMIT来分割它。

答案 1 :(得分:1)

我发现你没有使用聚合函数,我认为你应该改变你的查询来计算类别并按计数排序。

您的代码应该类似于:

<?php
    include_once 'db.php';

    $price = 'Price : $10';
    $sql = $DBcon->query("SELECT category, COUNT(*) as CNT FROM mytable WHERE article LIKE '%{$price}%' GROUP BY category ORDER BY CNT DESC");

    while ($Row = $sql->fetch_array()) {
       $category = $Row["category"];
       $item = $Row["cnt"];

       echo "<li><a href='/tag/". $category ."'>". $category ."</a> (" . $item . " item)</li>";
   }
?>