0

私はしばらくこれを探していましたが、成功しませんでした。

たとえば、YouTubeのように、推奨バーを実装しようとしています。動画を見ると、右側にリストまたはおすすめの動画が表示されます。

現在、私はこの方法を使用しています。

$offset_result = mysql_query( " SELECT FLOOR(RAND() * COUNT(*)) AS `offset` FROM `$tablename` ");
$offset_row = mysql_fetch_object($offset_result ); 
$offset = $offset_row->offset;
$result_rand = mysql_query( " SELECT * FROM `$tablename` LIMIT $offset, 9 " );

これは正常に機能しますが、結果が表示されない場合があります。また、たとえば最初のIDが200と表示されるため、完全にランダムではないという問題もあります。次の結果はid 201、次に202などになります。

この9つのランドンの結果を表示する方法があるかどうか知りたいのですが、たとえば、1ºの結果ID 500、2ºの結果ID 10、3ºの結果ID788などです。

ありがとうございました

4

4 に答える 4

1

これがあなたが探しているものに答えるかどうかは完全にはわかりませんが、試してみてください:

$result_rand = mysql_query("SELECT * FROM " . $tablename . " ORDER BY RAND() LIMIT 9");

于 2012-10-24T00:58:34.497 に答える
0

php rand()関数を使用して、5つの数値を作成し、それらを配列に保存できます。

http://php.net/manual/en/function.rand.php

<?php
$rand_array = array();
for($i=1;$i<5;$i++) {
    $rand_array[$i] = rand(0,500);
}
?>

その後、foreachループを使用してすべてのintでクエリを作成し、データを操作します。

<?php
foreach ($rand_array as $integer) {
     $q = "SELECT * from $tablename WHERE id='$integer';";
}
?>

これは役に立ちますか?

于 2012-10-24T00:59:31.940 に答える
0

後者は非推奨であるため、最初にmysql_の代わりにmysqli_関数を使用する必要があります。ランダムな行を取得するには、rand()による2番目の使用順序:

$rand_result = mysqli_query( "SELECT * FROM $tablename ORDER BY RAND() LIMIT 9;" );
于 2012-10-24T01:02:43.650 に答える
0

未テスト:

SELECT id、@ rownum:= @ rownum + 1 AS rownum、name FROM users u、(SELECT @rownum:= 0)r

これにより、各行に順番に一意の番号が付けられます。ここで、テーブルの1とcount(*)の間に9つの乱数を含む一時テーブルを作成し、それら2つを結合すると...

パフォーマンスについてはわかりませんが、必要な乱数は9つだけなので、ランドよりも高速で注文できるようです。

于 2012-10-24T01:49:34.520 に答える