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 に答える