gpt4 book ai didi

PHP MySQL 选择两个随机行但不使用 rand()

转载 作者:行者123 更新时间:2023-11-29 06:33:38 25 4
gpt4 key购买 nike

我需要选择 2 个随机行,但众所周知 rand() 太慢了。所以我尝试了一个来自网站的代码,它是:

SELECT *
FROM bilder AS r1 JOIN
(SELECT (RAND() *
(SELECT MAX(id)
FROM bilder)) AS id)
AS r2
WHERE r1.id >= r2.id
ORDER BY r1.id ASC
LIMIT 2

但是这样我多次得到相同的 2 行并且解析也不正确,所以这完全没用。有没有比 rand() 更好的工作解决方案?表名是bilder,字段是:iduseridnicknameid 是主要的和自动递增的。有些行也被删除,所以它不是 1 2 3 4 5 而是 1 2 4 5 6...所以生成随机数并选择它们的解决方案将不起作用

最佳答案

这个问题有多种解决方案,但像下面这样的解决方案通常具有足够好的性能:

SELECT b.*
FROM bilder b CROSS JOIN
(SELECT COUNT(*) as cnt FROM bilder) v
WHERE rand() <= 100 / cnt
ORDER BY rand()
LIMIT 2;

子查询选择大约 100 行。对如此少量的行进行排序通常非常快。然后它选择其中两个。

关于PHP MySQL 选择两个随机行但不使用 rand(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26370551/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com