我有一些具有某些条件的商品价格表。在这里,我尝试显示从类别和价格中分类的商品数量。
代码段:
<?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>";
}
?>
上面的代码对我来说效果很好,但是有一个问题。
数据库上的实际数据是:
我想根据最多的项目显示类别。但上面的脚本代码的结果随机显示。即使是大多数物品有时也不会出现。
我知道我的代码有问题,但不知道如何修复它。请帮帮我。
答案 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>";
}
?>