インターネットで調べましたが、何も見つかりませんでした...
Mysql dbとテーブルにレコードがあり、ページがロードされるたびにこのテーブルからランダムなレコードを取得する必要があります。どうやってやるの?そのための機能はありますか?
感謝する!ありがとう
ソート:リンク: http://www.derekallard.com/blog/post/ordering-database-results-by-random-in-codeigniter/
$this->db->select('name');
$query = $this->db->get('table');
$shuffled_query = $query->result_array();
shuffle ($shuffled_query);
foreach ($shuffled_query as $row) {
echo $row['name'] . '<br />';
}
Codeigniterでは、クエリを実行するときに「ランダム」で結果を並べ替えることができます。例えば
function get_random_page()
{
$this->db->order_by('id', 'RANDOM');
or
$this->db->order_by('Rand()');
$this->db->limit(1);
$query = $this->db->get('pages');
return $query->result_array();
}
以前にこれを使用したことがありますが、正常に機能することがわかりました。役立つことを願っています
Codeigniterについては知りませんが、ランダムデータセットの取得は
_SELECT * FROM table ORDER BY Rand() LIMIT 1
_
関連部分は、明らかに「ORDER BY Rand()
」です。
このコードスニペットは私にとってはうまく機能しました。
$this->db->select('name');
$this->db->order_by('Rand()');
$this->db->limit(1);
$query = $this->db->get('<table>'); //<table> is the db table name
return $query->result_array();
テーブルにあるレコードの数を知っていますか?次のようなことができます:
$count=mysql_exec('select count(*)-1 from some_table');
$count=Rand(1,$count);
その後:
select * from
some_Table
limit $count,1
大きなテーブルからランダムなレコードを取得するのは非常に高価です。 使用しないORDER BY Rand()
。
これは悪い考えですが、小さなテーブルがあれば問題ありません。巨大なデータベースでは、このタイプのクエリは非常に遅くなります。
Codemignerをdatamapperで使用します。これは、テーブルAdvertiser
からレコードをランダムに取得するために使用するコードです。
$ad = new Advertiser();
$ad->limit(3);
$ad->order_by('id', 'RANDOM');
$ad->get();
SELECT product_id, title, description
FROM products
WHERE active = 1
AND stock > 0
ORDER BY Rand()
LIMIT 4
ORDER BY Rand()句はランダムなレコードを返します! LIMITを使用してレコードを制限することもできます。
いくつかの行を削除したテーブルがあるとしましょう。 IDが正しく継続していない可能性があります。サンプルIDの場合:1,5,24,28,29,30,31,32,33(9行)
mysql_num_rowsは9を返します
別のメソッドは、存在しない行を返します:$ count = 9; // mysql_num_rows()== 9 $ count = Rand(1、$ count); //サンプルに対して4を返しますが、id = 4で行を処理しません
しかし、私の方法では、常に既存の行を取得します。コードを分離し、サイトのどこでも最初の2つのコードを使用できます。
// Inside of Controller Class
function _getReal($id,$name_of_table)
{
$Q=$this->db->where('id',$id)->get($name_of_table);
if($Q->num_rows()>0){return $Q;}else{return FALSE;}
}
function _getLastRecord($name_of_table)
{
$Q=$this->db->select("id")->order_by('id DESC')->limit("1")->get($name_of_table)->row_array();
return $Q['id'];
}
function getrandom()
{
$name_of_table="news";
$id=Rand(1,$this->_getLastRecord($name_of_table));
if($this->_getReal($id,$name_of_table)!==FALSE)
{
echo $id;
// Here goes your code
}
else
{
$this->getrandom();
}
// END
大きなテーブルからランダムなレコードを取得するのは非常に高価です。しかし、このコードは非常に効果的です..
$count=mysql_num_rows(mysql_query("select * from table_name WHERE SOME_OF_YOUR_CONDITION"));
$nums=Rand(1,$count);
mysql_query(" select * from table_name WHERE SOME_OF_YOUR_CONDITION LIMIT $count,1");
これは役に立ちます...
これは最善の方法ではないと思います。サンプルでは、_now==$count
_であるレコードを削除しました。 mysql_num_rows()
に対してこれを繰り返す必要があります
この関数は、テーブル内のすべての行をランダムな順序で取得します
public function get_questions(){
$this->db->select('*');
$this->db->order_by('Rand()');
$this->db->from('multiple_choices');
$query = $this->db->get();
return $query->result_array();
}