Случайная запись из базы данных mysql с помощью CodeIgniter

Я исследовал через Интернет, но ничего не мог найти …

У меня есть mysql db и записи за столом, и мне нужно получить случайную запись из этой таблицы при каждой загрузке страницы. Как мне это сделать? Есть ли какая-нибудь функция для этого?

Цените! благодаря


SORTED: ссылка: 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 предоставляет возможность заказывать ваши результаты с помощью «RANDOM» при запуске запроса. Например

 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(); } 

Я использовал это раньше и нашел, что он работает нормально. надеюсь, это поможет

Я не знаю о кодеригере, но получение случайного набора данных

 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() .

Это плохая идея, но если у вас есть небольшая таблица, нет проблем. В огромных базах данных этот тип запросов очень медленный.

Я использую codeigniter с datamapper. Это код, который я использую для случайного получения записи из таблицы Advertiser :

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

Давайте подумаем, что у нас есть таблица, где мы удалили несколько строк. Возможно, идентификатор не будет корректным. Для образца 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

Но с моим методом вы всегда получаете существующие строки. Вы можете отделить код и использовать первый код в любом месте на сайте.

 // 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 равна 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(); }