使用 CodeIgniter 从 mysql 数据库中随机记录

Posted

技术标签:

【中文标题】使用 CodeIgniter 从 mysql 数据库中随机记录【英文标题】:Random record from mysql database with CodeIgniter 【发布时间】:2010-12-10 07:41:11 【问题描述】:

我在互联网上进行了研究,但找不到任何东西......

我有一个 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 />';

【问题讨论】:

$this->db->order_by('rand()');是您添加到代码中以获得随机结果的行 【参考方案1】:

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


我以前用过这个,发现它工作正常。希望有帮助

【讨论】:

对于大表,这个解决方案很慢!最好的方法是在php中生成一个随机数,在mysql中生成SELECTWHERE。 @RajSar 的方法与此类似。 @user57750 这不可靠。如果某些记录已损坏或已被删除怎么办?【参考方案2】:

我不知道codeigniter,但是得到一个随机数据集是

SELECT * FROM table ORDER BY RAND() LIMIT 1

相关部分显然是“ORDER BY RAND()”。

【讨论】:

嘿,谢谢,根据您的提示,我找到了链接derekallard.com/blog/post/… :) 已排序!【参考方案3】:

你知道表中有多少条记录吗?你可以这样做:

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

然后:

select * from
some_Table
limit $count,1

【讨论】:

我认为这是最好的方法,但应该是 Limit $count, 1 吗?【参考方案4】:

这段代码 sn-p 对我很有效。

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

【讨论】:

【参考方案5】:

从大表中获取随机记录非常昂贵。 不要使用ORDER BY RAND()

这是个坏主意,但如果你有一张小桌子也没问题。 在庞大的数据库中,这种类型的查询非常慢。

【讨论】:

【参考方案6】:

我将 codeigniter 与 datamapper 一起使用。这是我用来从表Advertiser 中随机获取记录的代码:

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

【讨论】:

【参考方案7】:
SELECT product_id, title, description
FROM products
WHERE active = 1
AND stock > 0
ORDER BY RAND()
LIMIT 4

ORDER BY RAND() 子句返回随机记录!您也可以使用 LIMIT 限制记录。

【讨论】:

【参考方案8】:

假设我们有一个表格,我们删除了一些行。可能有 ID 不能正确继续。样品编号:1,5,24,28,29,30,31,32,33(9 行)

mysql_num_rows 返回 9

另一种方法将返回不存在的行: $计数=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;elsereturn 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

【讨论】:

【参考方案9】:

从大表中获取随机记录非常昂贵。但是下面这段代码非常有效..

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

这会很有帮助...

【讨论】:

【参考方案10】:

我认为这不是最好的方法。例如,您删除了 now==$count 的记录。您必须为mysql_num_rows() 重复此操作

【讨论】:

【参考方案11】:

此函数以随机顺序检索表中的所有行

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

【讨论】:

【参考方案12】:

没有 ORDER BY RAND() 查询的随机行:

$all_rows = $this->db->get('table')->result_array();
$random_row = $all_rows[rand(0,count($all_rows)-1)];

【讨论】:

以上是关于使用 CodeIgniter 从 mysql 数据库中随机记录的主要内容,如果未能解决你的问题,请参考以下文章

如何使用codeigniter从mysql中获取多个多维数组中的数据?

Codeigniter AJAX 从 MySQL 数据库获取数据而不刷新的正确方法

根据列的字符串长度从 MySQL 中选择 - CodeIgniter [重复]

Codeigniter 数据中的 MySQL 函数

无法从codeigniter中的mysql表中获取一些特殊字符

如何在codeigniter中将ajax选择的依赖下拉选项传递给mysql数据库