我想创建一个PHP页面,它从MySQL数据库中选择一个随机记录(一个字符串,它将用作唯一的“标记”)。我想只选择一次该随机记录,之后再也不会。
为了做到这一点,我在表中添加了一个额外的字段(名为'numberfield',包含数字0
),该字段在选择特定记录时递增。这样,只能选择numberfield表字段中值为0
的记录。一旦选择了随机记录,数字字段就会增加到1
,并且不能再选择。我正在考虑使用以下PHP代码:
$result = mysql_query("SELECT token FROM table WHERE numberfield < **1** ORDER BY RAND() LIMIT 0,1");
if (!$result) {
echo 'Could not run query: ' . mysql_error();
exit;
}
$row = mysql_fetch_row($result);
echo $row[0];
mysql_query("UPDATE table SET numberfield=numberfield+1 WHERE token=" + $row[0] + "");
这是正确的方法吗?有什么想法吗?
此外,我想在页面刷新时避免选择不同的随机记录。什么是将“令牌”保留在缓存中的正确和最简单的方法?例如,是否可以将“令牌”保留在页面刷新期间不会被覆盖的会话中,或者我是否必须使用其他技术(如Ajax等)。我们非常感谢您的帮助和评论!
答案 0 :(得分:0)
mysql_
函数,因为它们已被弃用。ORDER BY RAND()
,因为寻找随机数会产生开销。SELECT ... UPDATE
,您需要某种锁定。很可能一行随机选择两次。使用存储过程可以防止这种情况。