2010-09-03 37 views
2
select id, name from customer order by random() limit 5; 

以上查询选择随机记录。但它重复行。我只想每次选择一行而不重复。说我有编号1到5。第一次我要选择1,第二次查询显示2那么3,4 & 5.一旦序列完成它开始再次1.如何逐一选择记录而不重复

回答

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

+0

id |名称 -------- + ------------------------------------- 209096 |药店 204200 |眼部护理中心 185718 |达菲PC 214519 | Shopko 162225 |爱德华琼斯 7609 |返回在行动整脊中心 我使用“选择ID,从客户订单随机()名称” 有6条记录我只是想当我查询时,我会得到一个独特的行,每次六次,然后它重新开始或按照顶部不重复的方式排列记录 – jawad 2010-09-03 05:13:49

+0

如果要使用随机行,则必须记住使用了哪一个,并省略这些记录ID直到没有剩余为止重启。 – RandyMorris 2010-09-04 04:39:56

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之外有一个应用程序,可能会有更好的方法来解决这个问题。

相关问题