少しスパイスを加えようとしているページがあります..
基本的に、現在の SQL 選択は、ページで選択されたオプションからランダムに生成されます。
ただし、デフォルトの並べ替え順序をランダムにしたいと思います。しかし、私が読んだことから、MySql のネストされたサブクエリとrandによる順序の両方を避ける必要があります。
しかし、ネストされたサブクエリを使用して、限られた数のレコード (50 未満?) をランドで並べ替えるとどうなりますか?
これは悪い考えですか?そして、これは、たとえば 2kk + 行の大きなテーブルで問題になりますか?
これが私がやろうと思っていることです
select * from (
select a.*,b.*
from a
left join b on b.id=a.id
where a.isactive AND etc etc
order by a.id DESC // select say page 2 of 50 newest records
limit 50,50
) tblrand order by rand() // randomize the order of those 50 records
**編集* * *
デフォルトのソート順(指定されていない場合)は最新のレコードであるため、状況をよりよく反映するために、a.displayorderによる内部順序をa.id DESCによる順序に変更しました(つまり... idソートされた降順)
そしていくつかのコメントを追加しました
** *解決済み* **** (ただし、これがどのように機能するかを知りたい..つまり、mysql のパフォーマンスがどれほど悪いか... tnx を事前に)
tnx dbsman ..私は別の方法で問題を考えていました。最初は完全にランダムな行が欲しかったのですが、説明したように、これはお尻の痛みになるでしょう... (私は自分でやりたいことに混乱しました:)
しかし、私はアプリケーション側でそれを行う私の問題で魅力のように機能する解決策を見つけたと思います
//code that gets **Dataset ds** goes here
var rand = new Random();
var result = ds.Tables[0].AsEnumerable().OrderBy(r => rand.Next());
lst.DataSource = result.CopyToDataTable();