我想从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_client_notes.client_note_end”等于今天的行,然后显示所有基于值“ fi_client_notes.client_note_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
最佳答案
在这种情况下,无需联合即可获得结果,只需将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
关于php - Codeigniter MySQL查询,使用UNION首先选择等于今天的日期的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48325730/