0

私のSQLには、列IDとOrder.On WebサイトのデータはIDとOrderに従って表示されます.しかし、データの表示方法を変更したいので、コンテンツ全体をランダム化したい..誰でもSQLクエリを提案できますかこれ。

大まかなデータベース構造は以下です

city_id       city_name       city_order
  1               xyz             1
  2               geh             2
  3               tre             3

よろしく、

4

3 に答える 3

3

ORDER BY RAND()クエリの最後に追加

于 2013-10-11T18:26:47.000 に答える
1

次のようにします。

select city_id, city_name, city_order from table_name order by rand()

table_name はテーブルの名前です

于 2013-10-11T18:26:57.730 に答える
-1

他の人が提案したように使用できますORDER BY RAND()が、クエリがかつて持っていた可能性のある効率とパフォーマンスの類似性に別れを告げる時間を取る必要もあります. これは、次のものに基づいて結果セットを並べ替えているためです。

  1. 索引付けされていません。
  2. 動的に生成されます。

MySQL [および他のほぼすべての RDBMS] は、ランダム性の導入を必要とするほぼすべての操作には明らかに適していません。

より良いオプション:

  1. 予想される結果セットが十分に小さく、次の原因にならない場合:

    • Web サーバーとデータベース サーバー間で必要な帯域幅に基づく遅延。
    • 結果セットを格納するための過度のメモリ使用。

    次に、潜在的なコンテンツ アイテムをすべて取得し、array_rand()orshuffle()を使用してランダムな選択を取得します。

  2. 予想される結果セットが十分に大きくなり、すべてを PHP に渡したくない場合は、次のようにすることをお勧めします。

    $sql = 
    "SELECT COUNT(*) 'count'
    FROM content_table
    WHERE [your conditions]";
    
    $rs = $dbh->query($query);
    
    $random = rand(0,$rs['count']);
    
    $sql =
    "SELECT field1, field2, ...
    FROM content_table
    WHERE [your conditions]
    LIMIT $random, 1";
    
    $rs = $dbh->query($sql);
    

どちらもインデックスを尊重します。

于 2013-10-11T18:44:12.953 に答える