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

发布于 2024-11-16 00:20:35 字数 236 浏览 2 评论 0原文

我的模型将数据作为 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

岁月打碎记忆 2024-11-23 00:20:35

您是否考虑过在生成查询时添加 $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);

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 the order_by function for more information.

EDIT:

Alternatively, you could use result_array() instead of results(). Here's an example:

// 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);
我也只是我 2024-11-23 00:20:35

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

Objects do not have any explicit order of properties. You should be using an array if you require ordering.

や三分注定 2024-11-23 00:20:35

我们将让您模型将 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

情魔剑神 2024-11-23 00:20:35

在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 。

In mysql, you can order rows with order by rand(), like this:

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

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:

select product_id  from product offset $random_offset limit 10

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 .

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文