2015-03-13 2 views
1

У меня есть два запроса, но только первый, я хочу упорядочить по времени. Во-вторых, я этого не делаю.Codeigniter: порядок БД по результатам двух запросов к базе данных

Мой код:

$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. Любая помощь?

ответ

1

Пара вещей. В 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-> получить();)

+0

Вы, сэр, изумительны. Спасибо :) –

0

Используйте метод цепочки для точной переменной:

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

поэтому он не будет влиять на следующий запрос.

Смежные вопросы