行号与其他字段的随机顺序

时间:2013-11-11 16:50:26

标签: mysql sql

我有以下查询:

select @rownum:=@rownum+1 ‘rank’,  pgid, picfile from pages,
(SELECT @rownum:=0) r 
 where pos = 23
order by Rand()
limit 4

这将从数据库中选择图像文件名,并为其分配行号。不幸的是,Rand()的顺序然后随机化这些行,因此图像总是具有相同的行号,但“rank”字段是随机排序的。

rank picfile
3     c.jpg
1     a.jpg
4     b.jpg
2     d.jpg

我想要的是'等级'顺序总是为1,2,3,4,5但是要随机排序的图片文件名

rank picfile
1     a.jpg
2     d.jpg
3     c.jpg
4     b.jpg

并且下次运行查询时,我想要,例如,....

rank picfile
1     b.jpg
2     d.jpg
3     a.jpg
4     c.jpg

希望我已经正确解释了它!

非常感谢您的期待 克里斯

2 个答案:

答案 0 :(得分:1)

只需将rownum部分设为外部查询:

SELECT @rownum:=@rownum+1 ‘rank’, * 
FROM 
    (SELECT pgid, picfile FROM pages, (SELECT @rownum:=0) r 
        WHERE pos = 23
        ORDER BY Rand()
        LIMIT 4
    )
ORDER BY rank

答案 1 :(得分:0)

我的一位朋友提供了解决方案:

select @rownum:=@rownum+1 'rank',  r1.* FROM
    (SELECT  pgid, picfile from pages,
             (SELECT @rownum:=0) AS r2
     where pos= 23 
     order by Rand()  limit 5
   ) AS r1
ORDER BY rank