CodeIgniter ile mysql veritabanından rastgele kayıt

7 Cevap php

Ben internet üzerinden araştırılmış, ancak bir şey bulamadı ...

Ben bir masada bir mysql db ve kayıtları var, ve ben her sayfa yük bu tablodan rastgele kayıt almak gerekir. Bunu nasıl yapabilirim? Bunun için herhangi bir fonksiyon var mı?

Takdir! teşekkürler


SORTED: link: 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 />';
}

7 Cevap

Codeigniter bir sorgu çalıştırdığınızda 'rastgele' sonuçlarınızı sipariş olanağı sağlar. Örneğin

function get_random_page()
{
    $this->db->order_by('id', 'RANDOM');
    $this->db->limit(1);
    $query = $this->db->get('pages');
    return $query->result_array();

}

Ben daha önce bu kullanılan ve ince iş buldum. Umut olur

Ben CodeIgniter hakkında biliyorum, ama rastgele bir veri kümesi elde değil yok

SELECT * FROM table ORDER BY RAND() LIMIT 1

İlgili bölümü açıkça, "ORDER BY RAND()" dir.

Eğer tabloda kaç tane kayıt biliyor musunuz? Böyle bir şey yapabilirsiniz:

$count=mysql_exec('select count(*)-1 from some_table');
$count=rand(1,$count);

sonra:

select * from
some_Table
limit $count,1

Ben datamapper ile CodeIgniter kullanın. Bu benim tablodan rasgele bir kayıt almak için kullanabileceğiniz kod Advertiser:

 $ad = new Advertiser();
 $ad->limit(3);
 $ad->order_by('id', 'RANDOM');
 $ad->get();

Biz bazı satırlar silinmiş tablo var düşünüyorum sağlar. ID doğru devam değil belki vardır. Örnek id için: 1,5,24,28,29,30,31,32,33 (9 satır)

mysql_num_rows 9 döndürür

Another methods will return not existing rows: $count=9; //because mysql_num_rows()==9 $count=rand(1,$count); // returns 4 for sample, but we havn't row with id=4

Ama benim yöntem ile her zaman varolan satırları olsun. Sen kodunu ayırmak ve her yerde sitede ilk 2 kodu kullanabilirsiniz.

// 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

Büyük tablosundan rasgele kayıt alma çok pahalı. Ama bu kod feryat çok etkilidir ..

$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");

Bu yararlı olacaktır ...

Ben bu en iyi yol olmadığını düşünüyorum. Numune için, now==$count olduğunu kaydını sildim. Sen mysql_num_rows() için bu yineleme gerekir