Php 如何从数据库中随机选择n个不匹配的行?并将数据保存到会话

Php 如何从数据库中随机选择n个不匹配的行?并将数据保存到会话,php,mysql,Php,Mysql,使用纯SQL选择随机数据更好,还是只选择整个表并将其洗牌?如果纯SQL更好,有人能给我举一个最有效的方法吗 将所选数据保存到会话变量中也是一个好主意吗?我想做一个每页一个问题的测验,并且能够返回到已回答的问题并更改其答案。会话将保存用户选择的问题和答案的双重数组。或者有更有效的方法来实现这一点?当然,最好使用纯SQL选择随机数据。在这里你可以阅读 您可以将此数据保存在服务器端(会话)或客户端(COOKIE)。但在这种情况下,这不是主要问题。最重要的是,应用程序应该能够在最后一个问题之后访问用户的

使用纯SQL选择随机数据更好,还是只选择整个表并将其洗牌?如果纯SQL更好,有人能给我举一个最有效的方法吗


将所选数据保存到会话变量中也是一个好主意吗?我想做一个每页一个问题的测验,并且能够返回到已回答的问题并更改其答案。会话将保存用户选择的问题和答案的双重数组。或者有更有效的方法来实现这一点?

当然,最好使用纯SQL选择随机数据。在这里你可以阅读

您可以将此数据保存在服务器端(会话)或客户端(COOKIE)。但在这种情况下,这不是主要问题。最重要的是,应用程序应该能够在最后一个问题之后访问用户的问题和答案。MySQL中的“Order by rand()”函数非常慢,通常不应该使用。要么在选择后随机移动,要么最好将行引用随机化,然后进行查询选择。如果可以使用,后一种选择是最有效的

SELECT bar, foo, rand() FROM tabname ORDER BY 3 LIMIT 0,1;
当然,你可以使用AS和so-own,如果你想输出一些单一的数据(比如一些游戏的问题),那么限制很重要

另外,有些人会说rand()的速度很慢,但这不是真的,这取决于你如何使用它以及你将在哪里使用它。用上面这个简单的方法,它是相当快的,如果你做了一个有不到150000个问题的测验:-),它就可以了


希望我能帮助你。干杯。

将问题和答案保存在cookie或会话中是否有效?也许有更有效的方法?在我们的案例中,效率是多少?空间、处理速度、数据安全?有一次,我创建了一个模块,其中包含一些针对用户的竞赛(针对流行的俄罗斯新闻网站)。有多项选择题的测验和详细答案的问题。版主选择最正确答案的获胜者+开放式问题的创造性答案。这些比赛有一些真正的奖品,所以我需要将用户数据存储到数据库中,并为其创建管理面板。但也有一些简单的测试,比如你的测试和他们将数据存储到cookie中的测试。即使我不久前离开了那个地方,它仍然可以正常工作:)大部分处理速度都在低规格的服务器上。谢谢你的回答。