0

我有以下查询:

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

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

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

我想要的是“等级”顺序始终为 1、2、3、4、5,但 picfile 名称是随机排序的

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

希望我已经正确解释了!

非常感谢克里斯的期待

4

2 回答 2

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
于 2013-11-11T16:53:27.147 回答
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
于 2013-11-19T08:26:01.477 回答