gpt4 book ai didi

php - 随机抽取不更换

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:34:55 24 4
gpt4 key购买 nike

我想要一个 PHP 代码来从 MySQL 数据库中的表中一个一个地抽取一些 id 而不是随机替换。

现在我是这样实现的:

有一个表叫box

CREATE TABLE box
(
id INT UNSIGNED AUTO_INCREMENT,
PRIMARY KEY (id)
);

假设它包含 15 条记录,

盒子

id:
=====
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
=====

已抽中的id将被记录并排除在下一次抽中。

例如,

一开始,绘制的SQL是

SELECT id FROM box RAND() LIMIT 1;`.

假设结果是 4。

那我已经画了4张了,接下来画图的SQL是

SELECT id FROM box WHERE id != 4 ORDER BY RAND() LIMIT 1;

这次说结果是6。

也就是我画了4和6,所以接下来画画的SQL就是

SELECT id FROM box WHERE id != 4 AND id != 6 ORDER BY RAND() LIMIT 1;"

问题在于:

如果'box'表有2000条记录,我画了1000+个id,接下来画的SQL会很长。 我想知道更长的SQL语句是否会使程序或MySQL中的进程运行得更慢?如果是,是否有解决方案/设计/算法来解决这个问题? 表中的记录可能会增加,所以我无法在绘制之前对id进行随机排序。


关于问题的更多信息:

PHP代码会被多个用户调用,所以每个用户都有自己绘制的一些不同的id。

实际上,在我目前的设计中,用户绘制的 ID 存储在 PHP session 变量中。当用户想要绘图时,存储在 session 变量中的 ids 将被访问用于绘图 SQL,如上所示。

最佳答案

大部分编写的查询将花费与您的查询大致相同的时间。

顺便说一下,您查询中的条件等同于 NOT IN,您可能更容易应用 NOT IN

SELECT * FROM box WHERE id NOT IN (a[0],a[1]...)

现在关于增加查询大小是否会降低 MySQL 的速度,答案是否定的,不是真的。

关于为什么它不会减慢速度的文章是 here (记住你的查询等同于一个 not in)

关于php - 随机抽取不更换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13788600/

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