select id, name from customer order by random() limit 5;
上述查询选择随机记录。但是它会重复行。我只想每次选择一行而不重复。假设我的 id 为 1 到 5。第一次我想选择 1,第二次查询显示 2,然后是 3,4 和 5。序列完成后,它会再次从 1 开始。
由于 SELECT 是一个原子操作,我认为没有一个简单的解决方案。我还看到需要解决两个不同的问题:
选择单行而不重复显示的行。基本上你需要将显示的最后一行存储在某处。如果您有某个存储当前状态的应用程序,则可以选择将其保存为外部变量。草图解决方案是在 MySQL 5.0+ 中完成的:
首先准备一条稍后执行的语句并设置查询的初始位置:
PREPARE STMT FROM 'SELECT id, name FROM customer LIMIT ?, 1';
SET @pos = 0;
您可能需要添加默认排序以获得可靠的结果。
每次你想要获取一行时,执行语句
EXECUTE STMT USING @pos;
SELECT count(*) FROM customer INTO @max;
SET @pos=(@pos+1)%@max;
另一件事是,您想读取随机位置。我现在看到的唯一解决方案是创建一个临时表,该表要么保存客户随机订购的内容,要么创建一个临时表保存 0..@max 中的所有数字并读取主表中的当前位置从临时表中。如果您有 MySQL 之外的应用程序,可能有更优雅的方法来解决这个问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)