Я хочу изменить следующий запрос из модели 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()
как верхний уровень для заказа по условию
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
ORDER BY (n.client_note_end <> CURDATE()), n.client_note_date DESC LIMIT 15
. Что означает <> в этом случае?0 . n.client_note_date
и1 . n.client_note_date
потому что mysql1 . n.client_note_date
логическое значение false и true в 0 и 1