MySQLはrand関数で乱数を実現

1971 ワード

SELECT FLOOR(7 + ( RAND() * 6)); 一定範囲でランダムに数値を生成
友達がmysqlで乱数を使う方法を聞いた.
どのように1つの文を书いて数百本のMySQLデータを更新することができます!
MyQLデータベースをテストする必要があります.中には1万件以上のデータのデータベースがあります.PHPファイルを書くにはどうすればいいですか.何百件もの情報を更新するたびに、私は循環して1回1つの情報を更新します.そうすれば、私はWHILEで書けばいいことを知っています.もし1回の更新が100件のデータのように書けばいいですか.
正解はUPDATE cdb_posts SET views = rand();
MySQLの例:
  1:select * from tableA order by rand() limit 5;

                  。  15     ,   8   。

          ,  rand()  order by         ,      。You can't use a column with rand() values in an ORDER BY clause, because ORDER BY wolud evaluate the column multiple times.

Googleを検索すると、ネット上では基本的にmax(id)*randを検索してランダムにデータを取得します.
  2:

SELECT *

FROM tableA AS A1

JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM tableA)) AS a2_id) AS A2

WHERE A1.id >= A2.a2_id

ORDER BY A1.id ASC

LIMIT 5;

          5   。             ,  5 。       ,  15   ,     0.01   。

上の文はJOIN、mysqlのフォーラムで使われています
  3:

SELECT *

FROM tableA

WHERE id>=(SELECT FLOOR(MAX(id) * RAND()) FROM tableA)

ORDER BY id

LIMIT 5;

    ,  0.5 ,     ,                。           。

例3の文を書き換える
  4:

SELECT *

FROM tabelA

WHERE id >= (SELECT FLOOR(RAND() * (SELECT MAX(id) FROM tableA)))

ORDER BY id

LIMIT 5;

  ,      ,      0.01 

最後に、文を完璧にし、MIN(id)の判断を加える.私がテストを始めたとき、MIN(id)の判断を加えなかったため、結果の半分の時間はいつも表の前の数行にクエリーされ、完全なクエリー文は以下の通りです.
  5:

SELECT *

FROM tableA

WHERE id >= (SELECT FLOOR(RAND() * ((SELECT MAX(id) FROM tableA) - (SELECT MIN(id) FROM tableA)) + (SELECT MIN(id) FROM tableA)))

ORDER BY id

LIMIT 5;

  6:

SELECT *

FROM tableA as a1

JOIN (SELECT ROUND(RAND() * ((SELECT MAX(id) FROM tableA) - (SELECT MIN(id) FROM tableA)) + (SELECT MIN(id) FROM tableA)) AS a2_id)  AS a2

ORDER BY id

LIMIT 5;

   php             10 ,

  5     0.147433  

  6      0.015130  

    JOIN       WHERE