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


How to select n random, not match rows form database? and data saving to session

是用

纯SQL选择随机数据更好,还是只选择整个表并打乱它?如果纯SQL更好,有人可以给我看一个最有效的方法的例子吗?

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

当然,最好使用纯SQL选择随机数据。在这里,您可以阅读如何在mysql中选择随机行。

您可以将此数据保存在服务器端(会话)或客户端(COOKIE)上。但在这种情况下,这不是主要因素。最重要的是,应用程序应该有权访问最后一个问题之后的用户问题和答案

MySQL中的"Order by rand()"函数真的很慢,通常不应该使用。选择后随机播放,或者最好随机化行引用,然后执行查询选择。如果可以使用后一种选择,则后一种选择是最有效的。

SELECT bar, foo, rand() FROM tabname ORDER BY 3 LIMIT 0,1;

当然,你可以使用AS等,如果你想输出一些单一的数据(比如某些游戏的问题),LIMIT很重要。

PS - 有些人会说 rand() 是慢慢的,但事实并非如此,这只是取决于你如何以及你将在哪里使用它。在上面的这种简单方式中,它非常快,如果您进行一个包含少于 150 000 个问题的测验:-),那就没问题了。

希望我能帮助你。干杯。