php – 为什么MySQL在SELECT语句中使用RAND()时会返回相同的结果
我打开了许多浏览器窗口,指向同一个自动刷新的
PHP页面.它访问MySQL数据库以识别过期的客户信息.特别是获取最近一天未更新的记录并强制更新.其余的代码似乎处理得很好.
这是我的MySQLi查询: $query = "SELECT * FROM customers WHERE customer_group='consumables' AND customer_updated < DATE_SUB(NOW(),INTERVAL 1 DAY) ORDER BY RAND() LIMIT 10"; 我被告知RAND()不是很合适,因为它对大型表的处理速度很慢,但是在这个项目结束之前我的表不会增加到超过20000.我还有一个随机变量传递给URL,如“clientdataupdates.php?nocachepls = 1541231”. 所以这是我的问题:在当前的5000多条记录中,如果此脚本同时在多个浏览器窗口中运行,它们将从MySQL返回相同的记录.不可否认,所选记录似乎是随机选取的,但如果查询在同一时间运行,则在所有窗口中返回相同的记录. 我的研究受到以下事实的限制:我一直在寻找的关键词(现在几天)似乎与其他问题有关,例如“php mysql在使用rand()时返回相同的结果”有太多谷歌响应,指向一般使用rand(). 虽然我仍然感谢任何帮助,但实际上我更想知道为什么会这样.我对MySQL内部工作原理的了解是有限的,但是就我在PHP和MySQL接口方面的经验而言,我还没有看到类似的事情. 更新: 我还测试了使用ajax函数,该函数包含一个回调函数来重新启动它.每次div内容都是相同的记录 – 但它仍然看起来像随机选择了哪个记录. <div id='worker1' class='workerDiv'>worker: waiting..</div> <div id='worker2' class='workerDiv'>worker: waiting..</div> <div id='worker3' class='workerDiv'>worker: waiting..</div> <div id='worker4' class='workerDiv'>worker: waiting..</div> <div id='worker5' class='workerDiv'>worker: waiting..</div> <script> function nextWorker(thisWorker){ setTimeout(function(){ ajaxpage('customerdata_worker.php',thisWorker,nextWorker(thisWorker)); },10000); } setTimeout(nextWorker('worker1'),100); setTimeout(nextWorker('worker2'),100); setTimeout(nextWorker('worker3'),100); setTimeout(nextWorker('worker4'),100); setTimeout(nextWorker('worker5'),100); </script> 解决方法
您可能正在从某些结果集中的MySQL查询缓存中接收信息.
试试这个: SELECT SQL_NO_CACHE * /* etc */ 注意:将SQL_NO_CACHE字放在与SELECT和*(或您选择的第一列的名称)相同的行上. 看到:http://dev.mysql.com/doc/refman/5.1/en/query-cache.html它说,
专业提示:避免在软件中使用SELECT *.在结果集中提供所需列的名称. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |