codeigniter mysql查询使用union首先选择等于今天日期的值

64jmpszr  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(405)

我想从codeigniter上的模型修改以下查询:

public $table                 = 'fi_client_notes';
public $primary_key           = 'fi_client_notes.client_note_id';

public function default_select()
{
    $this->db->select("SQL_CALC_FOUND_ROWS fi_client_notes.*, fi_clients.client_name", FALSE);

    if ($this->session->userdata('user_id') <> 1)
    {
        $this->db->where('fi_clients.user_id', $this->session->userdata('user_id'));
    }
}

public function default_order_by()
{
        $this->db->order_by('fi_client_notes.client_note_date DESC');
}

public function default_join()
{
    $this->db->join('fi_clients', 'fi_clients.client_id = fi_client_notes.client_id');
}

我的目标是首先只选择值“fi\u client\u notes.client\u note\u end”等于今天日期的行,然后根据值“fi\u client\u notes.client\u note\u date”按降序显示其余所有行。
这是我正在尝试的问题:

(SELECT SQL_CALC_FOUND_ROWS fi_clients.client_name, fi_client_notes.* FROM (`fi_client_notes`) JOIN `fi_clients` ON `fi_clients`.`client_id` = `fi_client_notes`.`client_id` WHERE `fi_client_notes`.`client_note_end` = CURDATE())
UNION
(SELECT fi_clients.client_name, fi_client_notes.* FROM (`fi_client_notes`) JOIN `fi_clients` ON `fi_clients`.`client_id` = `fi_client_notes`.`client_id`
ORDER BY `fi_client_notes`.`client_note_date` DESC LIMIT 15)

但我不知道如何在codeigniter上使用它,因为codeigniter的activerecord不支持union

okxuctiv

okxuctiv1#

在这种情况下,您可以得到没有并集的结果,只需添加 n.client_note_end <> CURDATE() 作为order by子句的顶层

SELECT c.client_name, n.* 
     FROM `fi_client_notes` as n 
       JOIN
          `fi_clients` as c
         ON c.`client_id` = n.`client_id`
     ORDER BY (n.`client_note_end` <> CURDATE()),
              `n.`client_note_date` DESC LIMIT 15

相关问题