Случайная запись из базы данных MySQL с CodeIgniter - PullRequest
27 голосов
/ 27 октября 2009

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

У меня есть 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 />';
}

Ответы [ 11 ]

89 голосов
/ 27 октября 2009

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

}

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

6 голосов
/ 27 октября 2009

Я не знаю о codeigniter, но получить случайный набор данных -

SELECT * FROM table ORDER BY RAND() LIMIT 1

Соответствующая часть "ORDER BY RAND()", очевидно.

4 голосов
/ 05 января 2016

Этот фрагмент кода хорошо сработал для меня.

$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();
4 голосов
/ 27 октября 2009

Вы знаете, сколько записей в таблице? Вы могли бы сделать что-то вроде этого:

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

тогда:

select * from
some_Table
limit $count,1
3 голосов
/ 26 ноября 2011

Получение случайной записи из большой таблицы очень дорого. Не использовать ORDER BY RAND().

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

2 голосов
/ 14 февраля 2018
SELECT product_id, title, description
FROM products
WHERE active = 1
AND stock > 0
ORDER BY RAND()
LIMIT 4

Предложение ORDER BY RAND () возвращает случайные записи! Вы можете ограничить записи, также используя LIMIT.

2 голосов
/ 04 сентября 2012

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

 $ad = new Advertiser();
 $ad->limit(3);
 $ad->order_by('id', 'RANDOM');
 $ad->get();
1 голос
/ 05 апреля 2013

Получение случайной записи из большой таблицы очень дорого. Но ниже этот код очень эффективен ..

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

Это будет полезно ...

1 голос
/ 23 февраля 2010

Давайте представим, что у нас есть таблица, в которой мы удалили несколько строк. Возможно, ID не продолжается правильно. Для идентификатора образца: 1,5,24,28,29,30,31,32,33 (9 строк)

mysql_num_rows возвращает 9

Другие методы будут возвращать несуществующие строки: $ Кол = 9; // потому что mysql_num_rows () == 9 $ Кол = Rand (1, $ счета); // возвращает 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
0 голосов
/ 09 мая 2017

Эта функция извлекает все строки в таблице в случайном порядке.

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