Codeigniter MySQL запрос с использованием UNION для выбора значений, равных сегодняшней дате в первую очередь

0

Я хочу изменить следующий запрос из модели 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

Теги:
codeigniter

1 ответ

1

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню