基本上可以这样作: 1.用PHP生成一个随机字符串,形式基本上是: $a1=" id="; for($i=0;$i<10;$i++){ $a2 = 生成一个不重复的随机数; $a1 .= "$a2 or " } //这里要处理一下$a1,因为字符串最后是 or 要想办法去掉,也以加上点东西,比如: $a1 .= " id=0";然后: 2.update tbl_name set is_recommend=0; 3.update tbl_name set is_recommend=1 where $a1;
有没有人能写个比较完整的MYSQL语句啊 ?大家讨论一下!
MYSQL 产生 10 个<1000的随即数 declare @count int set @count =0 while @count <10 begin if @num print cast (rand()*1000 as int) set @count=@count+1 end
纠正错误: declare @count int set @count =0 while @count <10 begin print cast (rand()*1000 as int) set @count=@count+1 end
我要问下,如果,我说的是如果!如果达到推举的要求了,但是,是你读取480条数据之后达到了推举的要求之后呢?怎么办?zysoft17(瓷匠[zsss.blog.sohu.com])的方法比较可行,我再改进下。我也使用了零时表,不过我用的和zysoft17的不一样,我用零时表纪录已发表过的随书的id。首先,使用while 和rand(id)得到随机的20条id 。select id,bookname from 数据表 where id not in (select id from 零时表) order by rand() limit 1 这样,就可以随机得到一组数据了。把得到的得到的这个纪录存放到数组之前,我们要验证两步,一步是验证这次生成的数据是不是已经在前面被生成过了(这次生成的数据中)。第二步就是验证是不是存在于零时表里面(实际上,sql语句已经得到了,不过,不放心啊。如果上面的语句执行不利,要去掉where的部分呢!) 条件由楼主决定吧,反正循环部分能够得到的办法太多了
忘记说了,如果纪录不在零时表里面,要insert一个进去啊!不然……
每30分钟页面自动刷新,?i=<?=$i+1?> $i=$_GET["i"] $SQL="selcet * from table limit 10*".$i.",10*".$i."+9"
--首先必须创建临时表b 与 a 表相同 b中b1列(下有说明)不是标识列 --b中就是随即产生的10个记录时间设定可以建立触发器30分钟触发删除b表并执行以下: declare @count int declare @num int--a表总记录 select @num= count(*) from a set @count=0 declare @a_num int --推荐书目数 while @count <10 begin select @a_num= count(*) from b print @a_num if @a_num <10 begin insert into b select * from a where b1=cast(rand()*rand()*@num*2 as int)--b1是自增列 set @count=@count+1 end else if @num<>@count begin set @count=@num end else begin delete from b set @count=0 end end
d d d d d d d d d d d d d d d dd d d d d d d d dd d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d dddd d d d d
一次性取480条,每30分钟推荐10条
============================
先写入临时库,推荐的时候就删除掉临时库里面的记录
每30分钟依次取十个ID。
1.用PHP生成一个随机字符串,形式基本上是:
$a1=" id=";
for($i=0;$i<10;$i++){
$a2 = 生成一个不重复的随机数;
$a1 .= "$a2 or "
}
//这里要处理一下$a1,因为字符串最后是 or 要想办法去掉,也以加上点东西,比如:
$a1 .= " id=0";然后:
2.update tbl_name set is_recommend=0;
3.update tbl_name set is_recommend=1 where $a1;
declare @count int
set @count =0
while @count <10
begin
if @num
print cast (rand()*1000 as int)
set @count=@count+1
end
declare @count int
set @count =0
while @count <10
begin
print cast (rand()*1000 as int)
set @count=@count+1
end
这样,就可以随机得到一组数据了。把得到的得到的这个纪录存放到数组之前,我们要验证两步,一步是验证这次生成的数据是不是已经在前面被生成过了(这次生成的数据中)。第二步就是验证是不是存在于零时表里面(实际上,sql语句已经得到了,不过,不放心啊。如果上面的语句执行不利,要去掉where的部分呢!)
条件由楼主决定吧,反正循环部分能够得到的办法太多了
$i=$_GET["i"]
$SQL="selcet * from table limit 10*".$i.",10*".$i."+9"
--b中就是随即产生的10个记录时间设定可以建立触发器30分钟触发删除b表并执行以下:
declare @count int
declare @num int--a表总记录
select @num= count(*) from a
set @count=0
declare @a_num int --推荐书目数 while @count <10
begin
select @a_num= count(*) from b
print @a_num
if @a_num <10
begin insert into b
select * from a where b1=cast(rand()*rand()*@num*2 as int)--b1是自增列
set @count=@count+1
end
else if @num<>@count
begin
set @count=@num
end
else
begin
delete from b
set @count=0
end
end
d
d
d
d
d
d
d
d
d
d
d
d
d
d
dd
d
d
d
d
d
d
d
dd
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
dddd
d
d
d
d