2016-08-03 160 views
1

我有一個在線商店,成員可以訂閱3個包中的任何一個(1,3)。以下是產品數據庫表的示例。如何隨機顯示特定訂單中的類別

id package   product  status 
1  3     Biro   1 
2  1     Paper   1 
3  3     Pin   0 
4  2     Eraser  1 
5  2     Blade   1 
6  3     Bag   1 
7  2     Pen   0 
8  1     Sharpener  1 
9  1     Shoe   1 
10 2     Chair   1 

我首先展示了包裝3個產品,然後包裝2個產品,然後包裝1個產品最後這樣;

$get_products = mysql_query("SELECT * FROM products WHERE status='1' ORDER BY package DESC"); 

但我想真正做的是前3個產品隨機顯示的所有包,然後隨機顯示包2個產品,最後顯示包1個產品隨機。所以沒有什麼特別的東西總是在頂端,而有些東西總是在底端。

如何編寫語法?

+4

它不是隨機的,如果在一個特定的順序 – 2016-08-03 23:06:57

+0

從用戶的角度來看,是不是很如果某件事的位置總是與衆不同,那麼有點雜亂無章? – Rogue

回答

0

首先,拆分產品成組的包,你獲取查詢結果:

while ($row = $result->fetch_assoc()) { 
    $packages[$row['package']][] = $row; 
} 

你輸出之前然後洗牌組:

foreach ($packages as $package_products) { 
    shuffle($package_products); 
    foreach ($package_products as $product) { 
     // output product 
    } 
} 
0

它可以將產品排序列隨機只使用SQL通過執行以下操作:

$get_products = mysql_query("SELECT * FROM products WHERE status='1' ORDER BY package DESC, RAND()");

但是,請記住MySQL中的「RAND()」的排序可能會很慢,特別是如果您的列未被編入索引。

請參見以下鏈接以供參考:

MySQL: Alternatives to ORDER BY RAND()

How can i optimize MySQL's ORDER BY RAND() function?

mysql order by rand() performance issue and solution