我想要一个 PHP 代码从 MySQL 数据库中的表中一个一个地绘制一些 id 而无需随机替换。
现在我像这样实现它:
有一张桌子叫盒子
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 会话变量中。当用户想要绘图时,存储在会话变量中的 id 将被访问用于绘图 SQL,如上。