gpt4 book ai didi

php - 在 session 中存储随机选择的行?

转载 作者:行者123 更新时间:2023-11-30 23:36:39 25 4
gpt4 key购买 nike

在 session 中存储随机选择的行?

嗨!

我正在构建一个从 MySQL 表中输出随机单词的 PHP 脚本。每次刷新脚本时,我都希望显示一个新词。 (它连接到 jquery - 所以 php 文件的数据输出直接显示在我的页面上)

但是,我只想显示每个单词一次。如果选择了所有单词,我希望脚本重置并重新开始选择。

现在我已经通过设置一个名为“visited”的附加表并将所有从表“wordlist”中选择的行放在那里,以及用户唯一的 session ID 来完成此操作防止多个用户的结果相互干扰。

所以查询是这样的:

session_start();
$id = session_id();

$random_sql = "SELECT *
FROM wordlist AS a
LEFT JOIN visited AS b ON a.word = b.word
AND b.sessionid = '$id'
WHERE b.word IS NULL
ORDER BY a.weight * rand( ) DESC // Weighted random
LIMIT 1";


$random_row = mysql_query($random_sql);

if(mysql_num_rows($random_row) > 0)
{
while($row = mysql_fetch_row($random_row))
{
$insert_query = "INSERT INTO visited (ID, word, sessionid, date) VALUES ('$row[0]', '$row[1]', '$id', CURDATE())";
$insert = mysql_query($insert_query) or die (mysql_error());
echo $row[1];
}

这工作得很好,但我认为数据库很难同时处理许多访问者?

所以我的问题是:

如何在 session 中存储“已访问”词的信息并将其从查询中排除?

还有一件事:我估计 wordlist-table 将有大约 8000 行。这对于 ORDER BY RAND 函数来说是否太多了,并且渲染速度会明显变慢?

谢谢!

最佳答案

这取决于数据必须持久化的程度。如果您不需要持久性,那么在这种情况下 session 当然会更有效率。您可以在其中存储任何 PHP 数据结构,即我猜您在这种情况下会使用关联数组。

关于性能:如果单词是按顺序索引的,您可以考虑将随机数生成为直接 id 并直接检索特定行。 ORDER BY RAND() 必须生成所有数字并对它们进行排序,这比仅生成一个 id 效率低得多,如 RAND() * MAX(ID)

Read more here .

关于php - 在 session 中存储随机选择的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6810478/

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