如何随机显示特定订单中的类别
问题描述:
我有一个在线商店,成员可以订阅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个产品随机。所以没有什么特别的东西总是在顶端,而有些东西总是在底端。
如何编写语法?
答
首先,拆分产品成组的包,你获取查询结果:
while ($row = $result->fetch_assoc()) {
$packages[$row['package']][] = $row;
}
你输出之前然后洗牌组:
foreach ($packages as $package_products) {
shuffle($package_products);
foreach ($package_products as $product) {
// output product
}
}
答
它可以将产品排序列随机只使用SQL通过执行以下操作:
$get_products = mysql_query("SELECT * FROM products WHERE status='1' ORDER BY package DESC, RAND()");
但是,请记住MySQL中的“RAND()”的排序可能会很慢,特别是如果您的列未被编入索引。
请参见以下链接以供参考:
MySQL: Alternatives to ORDER BY RAND()
它不是随机的,如果在一个特定的顺序 – 2016-08-03 23:06:57
从用户的角度来看,是不是很如果某件事的位置总是与众不同,那么有点杂乱无章? – Rogue