0

私はこのMySQLクエリを持っています:

while ($x <= 9) {
   $data_1 = "SELECT scene FROM star WHERE star LIKE '%".$star."%' ORDER BY RAND() LIMIT  1";
   $result_1 = mysql_query ($data_1) OR die("Error: $data_1 </br>".mysql_error());

   while($row_1 = mysql_fetch_object($result_1)) {
      $scene = $row_1->scene;
      $x = $x + 1;
   }
} 

実行ごとに毎回新しいシーンを取得したいのですが、常に同じシーンを取得しています。問題は何ですか?誰かが私に検索しなければならない方向へのいくつかのポインタを作ることができますか?

4

1 に答える 1

4

あなたがする必要があるのは、ランダムシードを各行に結び付け、毎回新しいシードを結び付けることです。これを行うには、エイリアスされた一時的な列としてランダムな値をテーブルに割り当て、そこから選択します。

SELECT s.scene as scene FROM (
    SELECT stars.scene as scene, RAND() as seed 
      FROM stars
     WHERE star LIKE '%".$star."%' 
  ORDER BY seed
) s
LIMIT  1;

PDOを使用すると、次のようになります。

function getScene() {
    $sql = 'SELECT s.scene as scene FROM ( SELECT stars.scene as scene, RAND() as seed FROM stars WHERE star LIKE '%:star%' ORDER BY seed ) s LIMIT  1;';
    $query = $this->db->prepare($sql);//'db' is the PDO connection
    $query->execute(array(':star' => "Allison Brie"));

    foreach ($conn->query($sql) as $row) {
        print $row['scene'] . "\t";
    }
}

残りのコードで何を達成しようとしていたのかはわかりませんが、ほとんどの場合、ごちゃごちゃしているように見えます。

于 2012-07-17T00:58:28.133 に答える