代码点火器:数据库按效果排序两个数据库查询


Codeigniter: DB order by effects two database querys

>我有两个查询,但唯一的第一个,我想按时间排序。第二个,我没有。

我的代码:

 $query = $this->db->get('dayone_entries');
    $this->db->order_by("time", "desc"); //ordering it
    if ($query->num_rows() > 0) {

        foreach ($query->result() as $row) {
            $data[] = $row;
        }
        $query_user = $this->db->get_where('users', array('uid' => $data->uid));
        foreach ($query_user->result() as $row_user) {
            $data[] = $row_user;
        }
        return $data;

使用上面的代码,它在我的两个查询上按时间排序,$query$query_user我只想在$query上排序。有什么帮助吗?

几件事。在 Codeigniter 中,将所有 $this->db->fn() 放在 $this->db->get() 之前。CI 存储所有调用,并在运行 $this->db->get 时生成查询。例如:

$this->db->order_by("time", "desc");
$rows = $this->db->get('dayone_entries')->result();
$row_users = $this->db->get_where('users', array('uid' => $data->uid))->result();

但是,看起来您确实想使用联接。(我不是 100% 确定你的代码,但请尝试这样的事情)

$this->db->join('users', 'users.uid = dayone_entries.uid');
$this->db->order_by('time', 'desc');
$data = $this->db->get('dayone_entries')->result();

我猜你正在使用MySQL。上述 CI 应生成以下查询:

SELECT * FROM dayone_entries
JOIN users ON users.uid = dayone_entries.uid
ORDER BY time DESC;

您可以通过运行来检查查询 CI 运行的内容

$this->db->last_query();

(紧跟在$this->db->get();

使用链接方法精确变量:

$query = $this->db->order_by("time", "desc")->get('dayone_entries');

因此,它不会影响下一个查询。