我的模型将数据作为mysql对象返回:
return $q->result();
现在,我想将数据随机/随机化并将其发送到视图文件。但是当我在对象上使用shuffle($data)
时,它不起作用,发出错误。我想,只有当我的模型返回一个数组时它才会起作用。
有没有什么方法可以将数据随机化/随机化而不将其转换为数组,或者不使模型返回数组。
答案 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。