如果我使用mysql对象 - codeigniter,我如何随机化数据库行

时间:2011-06-15 05:55:04

标签: php codeigniter shuffle

我的模型将数据作为mysql对象返回:

return $q->result();

现在,我想将数据随机/随机化并将其发送到视图文件。但是当我在对象上使用shuffle($data)时,它不起作用,发出错误。我想,只有当我的模型返回一个数组时它才会起作用。

有没有什么方法可以将数据随机化/随机化而不将其转换为数组,或者不使模型返回数组。

4 个答案:

答案 0 :(得分:4)

您是否考虑在生成查询时添加$this->db->order_by('id', 'random');?第一个参数是字段名称,第二个参数是顺序(可能的值是“asc”,“desc”和“random”)。有关详细信息,请查看order_by函数。

修改

或者,您可以使用result_array()代替results()。这是一个例子:

// PHP5
$shuffled_result = $this->db->get('table')->result_array();
shuffle($shuffled_result);

// PHP4
$query = $this->db->get('table');
$shuffled_result = $query->result_array();
shuffle($shuffled_result);

答案 1 :(得分:1)

对象没有任何明确的属性顺序。如果您需要订购,您应该使用数组。

答案 2 :(得分:0)

好吧让你模型将mysql数据作为数组返回(如果你不知道如何给我代码),那么你可以使用Shuffle function来调整数组

我不认为你可以通过查询或其他东西随意改组自己的数据库

答案 3 :(得分:0)

在mysql中,您可以通过rand()按顺序排序行,如下所示:

select product_id  from product order by rand() limit 10;

因此,您可以获得所需的适当行数。

修改

@Damchey你是对的。如果表更大,则rand()函数将变慢。但每次,你选择了多少行? 所以,也许你可以在php中得到一个随机偏移量,而sql会喜欢这个:

select product_id  from product offset $random_offset limit 10

虽然,product_id的顺序是相同的,但偏移是不同的,所以如果你的表很大,那么每次你都可以获得不同的行。 并确保您的偏移量不大于rows_total - limit_num。