如果我正在使用mysql对象-Codeigniter,我该如何随机化数据库行

问题描述

|| 我的模型将数据作为MysqL对象返回:
return $q->result();
现在,我想对数据进行混洗/随机化并将其发送到视图文件。但是,当我在对象上使用ѭ1时,它不起作用,并显示错误消息。我猜想,只有当我的模型返回一个数组时,它才会起作用。 我有什么方法可以不将数据转换为数组,也可以不使模型返回数组就可以对数据进行随机/随机化处理。     

解决方法

        您在生成查询时是否考虑过添加
$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);
    ,        对象没有任何明确的属性顺序。如果需要订购,应该使用数组。     ,        好吧,让您建模以数组形式返回mysql数据(如果您不知道怎么办,请给我代码),然后就可以使用Shuffle函数对数组进行混洗了 我认为您无法通过查询或其他方法来重新整理自己的数据库     ,        在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。