MySQLデータベーステーブルからランダムデータのコードを取り出します。
2571 ワード
MySQL どのように表からランダムデータを取り出すか?
以前は群の中でこの問題を討論したことがあって、比較的に面白いです。mysqlの文法は本当に面白いです。
彼らはPHPを使ってランダムを実現したいと思っていましたが、複数を取り出して2回以上調べたいようです。
マニュアルをめくって、次の文を見つけたら、任務を完成できます。
SELECT * FROM テーブルname ORDER BY。 ランド() LIMIT 5;
ラドはマニュアルでこう言います。
RAND()
RAND(N)
0から1.0の範囲内のランダム浮動小数点の値を返します。整数パラメータNが指定されている場合、シード値として使用されます。
mysql> プロジェクト RAND()
-> 0.925
mysql> プロジェクト RAND(20)
-> 0.811
mysql> プロジェクト RAND(20)
-> 0.811
mysql> プロジェクト RAND()
-> 0.2079
mysql> プロジェクト RAND()
-> 0.7888
あなたはORDERにいてはいけません。 BY子文はRAND()の値で列を使用します。ORDERのためです。 BYは複数回列を計算します。しかし、MySQL 3.23では、あなたが行うことができます。 SELECT * FROM テーブルname ORDER BY。 RAND()は、SELECTから得られる有利性があります。 * FROM テーブル1 WHERE a=b AND cでも試してみました。8千条の記録表は一回実行すると0.08が必要です。 sec、遅くなりました
その後、googleを教えてもらいました。下記のコードをもらいました。
以下はphpコードです。
以前は群の中でこの問題を討論したことがあって、比較的に面白いです。mysqlの文法は本当に面白いです。
彼らはPHPを使ってランダムを実現したいと思っていましたが、複数を取り出して2回以上調べたいようです。
マニュアルをめくって、次の文を見つけたら、任務を完成できます。
SELECT * FROM テーブルname ORDER BY。 ランド() LIMIT 5;
ラドはマニュアルでこう言います。
RAND()
RAND(N)
0から1.0の範囲内のランダム浮動小数点の値を返します。整数パラメータNが指定されている場合、シード値として使用されます。
mysql> プロジェクト RAND()
-> 0.925
mysql> プロジェクト RAND(20)
-> 0.811
mysql> プロジェクト RAND(20)
-> 0.811
mysql> プロジェクト RAND()
-> 0.2079
mysql> プロジェクト RAND()
-> 0.7888
あなたはORDERにいてはいけません。 BY子文はRAND()の値で列を使用します。ORDERのためです。 BYは複数回列を計算します。しかし、MySQL 3.23では、あなたが行うことができます。 SELECT * FROM テーブルname ORDER BY。 RAND()は、SELECTから得られる有利性があります。 * FROM テーブル1 WHERE a=b AND c
その後、googleを教えてもらいました。下記のコードをもらいました。
SELECT *
FROM table_name AS r1 JOIN
(SELECT ROUND(RAND() *
(SELECT MAX(id)
FROM table_name)) AS id)
AS r2
WHERE r1.id >= r2.id
ORDER BY r1.id ASC
LIMIT 5;
実行効率は0.02が必要です。 残念なことに、mysqlしかありません。 4.1.*以上がこのようなサブクエリをサポートしている。 以下はphpコードです。
<?
//
$s = isset( $_GET['s'] )?$_GET['s']:0;
$e = isset( $_GET['e'])?$_GET['e']:50;
$count =85000;
if( $s < $count )
{
$sql = "select * from _info where isget =0 order by id desc limit $s,$e ";
$query = mysql_query( $sql );
while( $rs = mysql_fetch_array( $query ) )
{
$id = $rs['id'];
$sss = $rs['sss'];
$typeid = $rs['typeid'];
$isget = $rs['isget'];
$sql = "insert into _info_bak (id, ,typeid,isget) values('$id','$sss','$typeid','$isget')";
mysql_query( $sql ) ;
echo $sql;
//exit;
$sqlu = "update _info set isget=1 where id =".$rs['id'];
mysql_query( $sqlu );
}
echo '<meta http-equiv="refresh" content="0;url=rand.php?s='.($s+50).'&e=50"> , '.$s.' ......';
}
else
{
echo ' <a href=rand.php> </a>';
}
?>