2016-08-03 161 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