我正在尝试准确显示 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/