【发布时间】:2012-11-27 03:17:48
【问题描述】:
我想要一个 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 中的程序或进程运行得更慢? 如果是,是否有 解决方案/设计/算法 来解决这个问题? 表格中的记录可能会增加,所以我无法在绘制之前对ids进行随机排序。
关于问题的更多信息:
PHP代码会被多个用户调用,所以每个用户都有自己绘制的一些不同的id。
实际上,在我当前的设计中,用户绘制的 id 存储在 PHP 会话变量中。当用户想要绘图时,会话变量中存储的 id 将被访问用于绘图 SQL 如上所述。
【问题讨论】:
标签: php mysql sql algorithm random