CodeIgniter を使用した mysql データベースからのランダムなレコード
-
06-07-2019 - |
質問
インターネットで調べたのですが、何も見つかりませんでした...
mysql データベースとテーブルのレコードがあり、ページをロードするたびにこのテーブルからランダムなレコードを取得する必要があります。どうやってやるの?そのための機能はありますか?
感謝する!ありがとう
並べ替え:リンク: 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
関連部分は&quot; ORDER BY RAND()
&quot;です。
テーブルにあるレコードの数を知っていますか?次のようなことができます:
$count=mysql_exec('select count(*)-1 from some_table');
$count=rand(1,$count);
then:
select * from
some_Table
limit $count,1
このコードスニペットは、私にとってはうまくいきました。
$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();
大きなテーブルからランダムレコードを取得するのは非常に高価です。
使用しない ORDER BY RAND()
。
これは悪い考えですが、小さなテーブルがあれば問題ありません。 巨大なデータベースでは、このタイプのクエリは非常に遅くなります。
dataignapperでcodeigniterを使用しています。これは、テーブル 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();
}