如何以特定顺序随机显示类别

时间:2016-08-03 23:05:06

标签: php mysql random

我有一个在线商店,会员可以订阅3个包中的任何一个(1,2和3)。以下是Products DB表的示例。

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产品。因此,没有特定的项目总是在顶部,而有些项目总是在底部。

如何编写语法?

2 个答案:

答案 0 :(得分:1)

可以通过执行以下操作,仅使用SQL随机对products列进行排序:

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

但是,请记住" RAND()"在MySQL中可能会很慢,尤其是如果您的列没有编入索引。

请参阅以下链接以供参考:

MySQL: Alternatives to ORDER BY RAND()

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

mysql order by rand() performance issue and solution

答案 1 :(得分: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
    }
}