如何从MYSQL获取随机行以及如何在活动记录中编写它?

时间:2017-02-14 10:17:31

标签: mysql codeigniter activerecord codeigniter-2 codeigniter-3

这是我的查询

"SELECT * FROM package_info ORDER BY RAND() LIMIT 0,3;"

我尝试将它写在像这样的活动记录中。

$this->db->select('*');
$this->db->from('package_info');
$this->db->order_by("id", "random");
$this->db->limit(0, 3);
$result = $this->db->get();

但这不起作用。如何在活动记录中写这个?

2 个答案:

答案 0 :(得分:1)

CodeIgniter并不强制要求您为大多数Query Builder语句提供2个参数,您可以通过执行->where('1=1')来完成整个WHERE,并且完全正常。

我很惊讶有多少人不理解方法链接,但我会在我的例子中展示它更好......

$result = $this->db->select('*')
    ->from('package_info')
    ->order_by('rand()')
    ->limit(0, 3)
    >get();

如上所述,如果原始查询中没有2个参数,则不要强迫添加两个参数。

使用这些基本查询可以做的另一件事是完全省略from('package_info')并将表名保留在->get('package_info')

如果您无法使用查询构建器,则无需使用它。我不做一些事情(你不能将UNION与他们一起使用)。在这种情况下,只需使用

$result = $this->db->query("SELECT * FROM package_info ORDER BY RAND() LIMIT 0,3;");

答案 1 :(得分:1)

使用下面的代码,它可以正常工作 -

$this->db->select('*');
$this->db->from('package_info');
$this->db->order_by("id", "random");
$this->db->limit(3, 0);
$result = $this->db->get()->result(); 

// shows last executed query
echo $this->db->last_query();

// shows data fetched
echo "<pre>";
print_r( $result );
echo "</pre>";

您可以访问此链接以查看在Codeigniter中如何使用查询。 https://www.codeigniter.com/userguide2/database/active_record.html