如何逐个选择记录而不重复

时间:2010-09-03 04:26:54

标签: mysql database

select id, name from customer order by random() limit 5;

以上查询选择随机记录。然而,它重复行。我只是想每次都选择一行而不重复。说我有id 1到5.第一次我要选择1,第二次查询显示2然后3,4& 5.序列完成后,再次以1开始。

2 个答案:

答案 0 :(得分:0)

$query= "select id, name from customer order by id limit ".rand(1,5).",1"

在此处详细了解如何使用限制:http://dev.mysql.com/doc/refman/5.0/en/select.html

答案 1 :(得分:0)

由于SELECT是一个原子操作,我不认为有一个简单的解决方案。我还看到了两个需要解决的问题:

选择单行而不重复显示的行。基本上你需要存储显示在某处的最后一行。如果您有一些存储当前状态的应用程序,则可以选择将其保存为外部变量。草绘的解决方案在MySQL 5.0 +中完成:

首先准备一个稍后将执行的语句并设置查询的初始位置:

PREPARE STMT FROM 'SELECT id, name FROM customer LIMIT ?, 1';
SET @pos = 0;

您可能希望添加defautl排序以获得可靠的结果。 每次要获取单行时,请执行

语句
EXECUTE STMT USING @pos; 
SELECT count(*) FROM customer INTO @max; 
SET @pos=(@pos+1)%@max;

另一件事是,你想读一个随机的位置。我现在看到的唯一解决方案是创建一个临时表,该表保存来自客户的内容随机排序,或者创建一个临时表,其中包含0 ... @ max中的所有数字并读取主表中的当前位置来自临时表。如果你在MySQL之外有一个应用程序,可能有更优雅的方法来解决这个问题。