如果我使用 mysql 对象,如何随机化数据库行 - codeigniter
我的模型将数据作为 mysql 对象返回:
return $q->result();
现在,我想对数据进行随机/随机化并将其发送到视图文件。但是当我在对象上使用 shuffle($data)
时,它不起作用,并给出错误。我想,只有当我的模型返回一个数组时它才会起作用。
有什么方法可以对数据进行随机/随机化,而不将其转换为数组,或者不使模型返回数组。
My model returns data as mysql objects:
return $q->result();
Now, I want to shuffle/randomize the data and send it to the view file. But when I use the shuffle($data)
on the object, it doesn't work, gives out an error. I guess, it will only work if my model returns an array.
Is there any way I can shuffle/randomize the data without converting it to an array, or without making the model return an array.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您是否考虑过在生成查询时添加
$this->db->order_by('id', 'random');
?第一个参数是字段名称,第二个参数是顺序(可能的值为“asc”、“desc”和“random”)。有关详细信息,请查看order_by
函数。编辑:
或者,您可以使用
result_array()
而不是results()
。这是一个例子:Have you thought about add
$this->db->order_by('id', 'random');
when generating the query? The first parameter is the field name and the second the order (possible values are "asc", "desc", and "random"). Have a look at theorder_by
function for more information.EDIT:
Alternatively, you could use
result_array()
instead ofresults()
. Here's an example:对象没有任何明确的属性顺序。如果需要排序,则应该使用数组。
Objects do not have any explicit order of properties. You should be using an array if you require ordering.
我们将让您模型将 mysql 数据作为数组返回(如果您不知道如何操作,请给我代码),然后您可以使用 随机播放函数
我认为您不能通过查询或其他方式自行随机播放数据库
Well make you model to return the mysql data as array (give me the code if you don't know how) and from then you can use to shuffle the array with Shuffle function
I don't think you can shuffle the data base it self with query or something
在mysql中,你可以通过rand()对行进行排序,如下所示:
这样,你就可以获得你想要的适当数量的行。
编辑:
@Damchey 你是对的。如果表较大,则 rand() 函数会很慢。但每次,您选择了多少行?
所以,也许你可以在php中获得一个随机偏移量,而sql会像这样:
虽然product_id的顺序相同,但偏移量不同,所以如果你的表很大,那么每次你都可以获得不同的行。
并确保您的偏移量不大于 rows_total - limit_num 。
In mysql, you can order rows with order by rand(), like this:
so, you can get appropriate number of rows you want.
EDIT:
@Damchey you're right. If the table is bigger, than the rand() function will be slow. But every time, how many rows you select?
So, Maybe you can get a random offset in php, and sql will like this:
Although, the order of product_id is same, but offset is different, so if your table is big, than everytime you can get different rows.
And make sure, your offset if not bigger than rows_total - limit_num .