使用 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中生成SELECT
和WHERE
。 @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 [重复]