我们如何在laravel中对随机记录进行分页?例如:$products=Product::all()->orderBy(DB::raw('RAND()'));$products->paginate(4);$products->setPath('products');由于随机顺序,以上将以重复记录结尾。我如何保留$products对象,以便在发出新页面请求时,它应该通过相同/固定的随机记录集进行过滤? 最佳答案 当你潜入documentationmysql并搜索RAND()功能,您将看到您可以使用“种子”。通过使用种子,您将始终获得相
我正在尝试为我的网站实现一个简单的密码重置系统。这个想法是这样的:用户请求密码重置链接。CodeIgniter系统通过MYSQL使用RAND和MD5(我知道它不安全且损坏,可能最好使用SHA1或更好,不是重点)生成随机字符串并对其进行哈希处理,生成32位key。用户收到包含key的链接。剩下的就很明显了。我想知道是否-答:MYSQL函数RANDMD5(或更好)被生成到设置为UNIQUE的字段中,如果它们碰巧生成的键已经存在于该字段下的表中,将自动重新生成。B:这是生成密码重置链接的可接受方法。或者用盐对用户的电子邮件地址进行散列以防止重复是否更好?显然,这只是围绕整个过程的基本实现和安
我正在寻找一种从可能有数百万行的MySQL表中随机选择满足特定条件的100行的有效方法。我发现的几乎所有内容都建议避免使用ORDERBYRAND(),因为性能和可扩展性较差。然而,thisarticle建议ORDERBYRAND()仍可用作获取随机数据的“良好且快速的方式”。基于这篇文章,下面是一些示例代码,展示了我正在尝试完成的工作。我的问题是:这是从可能有数百万行的表中随机选择100(或最多数百)行的有效方法吗?性能何时会成为问题?SELECTuser.*FROM(SELECTidFROMuserWHEREis_active=1ANDdeleted=0ANDexpiretime>'
我建立了一个网站,我需要选择随机加权记录来自数据库。SQL:selectonerowrandomly,buttakingintoaccountaweight中有一段代码SELECTt.*,RAND()*t.weightASwFROMtabletORDERBYwDESCLIMIT1它适用于小样本记录。当尝试接近100万条记录时,速度会变慢(1.3-1.8秒)在我的本地机器上,我想在更大的设备上我会花更长的时间。如何优化?有没有更好的随机选择加权记录的方法?我的尝试是定期计算权重,将它们存储在单独的表中,以编程方式选择随机数并搜索最接近该数字的记录。 最佳答案
我有一个相当简单的SQL(MySQL):SELECTfooFROMbarORDERBYrank,RAND()我注意到当我刷新结果时,随机性很弱。目前样本数据中有六个排名相同的结果(整数零)。有很多随机性测试,但这里有一个简单的手动测试:运行两次时,两次运行的第一个结果应该相同,大约有六分之一的时间。这肯定不会发生,领先的结果至少有三分之一的时间是相同的。我想要对排列进行均匀分布。我不是专家统计学家,但我很确定ORDERBYRAND()应该可以做到这一点。我错过了什么?对于MySQL,SELECTrand(),rand()显示两个不同的数字,所以我不相信“每个查询一次”的解释
我正在做一个项目,它有一个很大的QuestionBank,为了测试添加到系统,20个问题在运行时基于以下查询:SELECTQuestion.*fromQuestionJOINTestONQuestion.Subject_ID=Test.Subject_IDANDQuestion.Question_Level=Test.Test_LevelORDERBYRAND()LIMIT20;但是,众所周知,MySQL的RAND()函数会杀死您的服务器,我一直在寻找更好的解决方案。结果EXPLAIN[上述查询]:+----+-------------+----------+------+------
到目前为止,我一直在使用PHP创建密码安全的随机值,使用openssl_random_pseudo_bytes.我想在存储的函数中生成加密安全token,我正在寻找的是RAND(),还是它不是加密安全的? 最佳答案 我也在研究同样的问题。RANDOM_BYTES(len)似乎是我们一直在寻找的解决方案https://dev.mysql.com/doc/refman/5.7/en/encryption-functions.html#function_random-bytes会使用像HEX(RANDOM_BYTES(length_of_
我有一个只有几行(前50行)的表,我需要从表中获取随机值我可以通过ORDERBYRAND()LIMIT1主要问题是当我在5秒内有6k个选择时,rand仍然“可靠”吗?兰特是如何计算的,我可以随着时间的推移播种吗?(idk,每5秒)。 最佳答案 MySQL伪随机数生成器是完全确定的。文档说:RAND()isnotmeanttobeaperfectrandomgenerator.Itisafastwaytogeneraterandomnumbersondemandthatisportablebetweenplatformsforthes
我有一个分布在多个服务器上的分片MySQL数据库表,并且想要一个函数来获取随机记录。在我看来,最好的方法是:在(Perl)应用层中选择一个随机分片。从该分片上的表中随机选择一行。这个问题将集中在解决方案的第2部分。我的表没有数字ID,我们决定使用GUID以避免必须维护票务服务的开销。我们将我们的GUID与分片标识符相结合,以确保它们是唯一的。表格是这样的:guidnamedetails003-b0470602-a64b-11da-8632-93ebf1c0e05aAuraSomedetails到目前为止,我得出的最佳答案是由Jack提出的,即:计算数据库中的记录数。在1和步骤1的结果之
我记得在某处读到过使用orderbyrand()是不好的,我只是启动了它并找到了一篇证明它的文章。对于大型数据库,按rand()排序可能会非常慢,建议的解决方案是在php中生成一个随机数并根据它进行选择。问题是我需要验证其他字段才能返回我的记录。我可能还删除了一些旧记录,这也可能会导致问题。谁能提供一种从表中选择一些符合特定条件(例如字段paid必须等于1)的随机记录的体面方法? 最佳答案 通过RAND()进行排序的原因可能很慢,因为您强制数据库在返回任何内容之前对整个表进行实际排序。仅将负载减少到单个表扫描要快得多(尽管仍然有些慢