2017-08-09 78 views
0

我有一個商品價格表,有一些條件。在這裏,我嘗試顯示從類別和價格中排序的商品數量。顯示數據從最高值排序

代碼片段:

<?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項
  • 然後..

我想根據最多的項目數來顯示類別。但上面的腳本代碼的結果是隨機顯示的。即使最多的項目有時也不會出現。

我知道我的代碼有問題,但不知道如何解決它。請幫幫我。

+1

['ORDER BY'(https://www.w3schools.com/sql/sql_orderby.asp)製成正是爲 – litelite

+0

我看你是不使用聚合函數,我認爲你應該改變你的查詢,以獲得對類別的依賴,並按次數排序 –

回答

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>"; 
    } 
?> 
1

在PHP不是很大,但爲什麼不立即查詢所有數據(假設並不多類),像這樣:

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

如果許多類別,你可以通過使用LIMIT分裂這一點。