php - 比当前查询更好的方法来组合随机分类条目?

标签 php mysql database-schema

我正在尝试准确显示 6 个随机“娱乐”条目,但在我当前的查询中,它获得了 1 到 6 之间的随机数,并显示了该条目数。我如何更新此查询以使其恰好显示我的文章表中的 6 个随机娱乐条目?另外,我不想做 ORDER BY RAND() 因为我的表会随着时间的推移变得更大。这是我当前的查询:

SELECT
    r1.*
FROM
    Articles AS r1
    INNER JOIN (SELECT(RAND() * (SELECT MAX(id) FROM Articles)) AS id) AS r2
WHERE
    r1.id >= r2.id
    AND r1.category = 'entertainment'
LIMIT 6;

表结构:

table Articles
- id (int)
 - category (varchar)
 - title (varchar)
 - image (varchar)
 - link (varchar)
 - Counter (int)
 - dateStamp (datetime)

最佳答案

您的“娱乐”条目都应具有唯一 ID,该 ID 应为整数。

如果是这种情况,您可以使用 PHP 的 rand() 函数在 1 和您拥有的条目数量之间生成 6 个随机整数。这是我编写的一个可能有用的函数。

function selectSixRandomEntries() {
    $queryWhere = "";
    $i = 0;

    while($i < 6) {
        $randomNumber = rand(1, 200);
        if (strpos($queryWhere, $randomNumber) == -1)
            continue;

        $queryWhere .= "r1.id = " . rand(1, 200);
        if ($i != 5)
            $queryWhere .= " OR ";

        $i++;
    }

    return $queryWhere
}

你可以尝试使用它

$query = "SELECT
    r1.*
FROM
    Articles AS r1
    INNER JOIN (SELECT(RAND() * (SELECT MAX(id) FROM Articles)) AS id) AS r2
WHERE
    " . selectSixRandomEntries() . " 
    AND r1.category = 'entertainment'
LIMIT 6";

关于php - 比当前查询更好的方法来组合随机分类条目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36368417/

相关文章:

php - 查询延迟返回一篇文章

php - MySQLi 在使用 SSL 时是否默认验证服务器证书?

php - Symfony/PHP - 存储单个值的最佳方式

jpa - 使用 JPA 持久性架构生成时出现错误“未指定脚本”

php - 尝试实现 "Like"功能和 "Wishlist"功能。两者都有 1 个中间表?

Whois 的 PHP 脚本

php - 将 PHP 应用程序转换为 Cocoa 的教程?

mysql - 我对 LOAD DATA INFILE 和 ON DUPLICATE KEY UPDATE 做错了什么

c# - 使用单个 Entity Framework Core DbContext 管理具有同名表的多个数据库模式

MySQL多语言表结构