Random record from mysql database with CodeIgniter

2019-04-03 09:06发布

I researched over the internet, but could not find anything...

I have a mysql db, and records at a table, and I need to get random record from this table at every page load. how can I do that? Is there any func for that?

Appreciate! thanks


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

11条回答
闹够了就滚
2楼-- · 2019-04-03 09:39

Do you know how many records there are in the table? You could do something like this:

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

then:

select * from
some_Table
limit $count,1
查看更多
神经病院院长
3楼-- · 2019-04-03 09:40

I think this is not best way. For sample, you've deleted record which is now==$count. You must iterate this for mysql_num_rows()

查看更多
虎瘦雄心在
4楼-- · 2019-04-03 09:48

Getting random record from large table is very expensive. Don't use ORDER BY RAND().

This is a bad idea, but if you have a small table no problem. In a huge databases this type of queries very slow.

查看更多
Fickle 薄情
5楼-- · 2019-04-03 09:48

This function retrieve all rows in table in random order

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();
}
查看更多
狗以群分
6楼-- · 2019-04-03 09:53

This code snippet worked well for me.

$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();
查看更多
闹够了就滚
7楼-- · 2019-04-03 09:54

Lets think we have table where we deleted some rows. There is maybe ID not continues correctly. For sample id: 1,5,24,28,29,30,31,32,33 (9 rows)

mysql_num_rows returns 9

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

But with my method you always get existing rows. You can separate code and use first 2 code anywhere on site.

// 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
查看更多
登录 后发表回答