nskarl
@nskarl
Вообще дизайнер

Как вытащить last row в запросе с group by?

Привет sql-гуру
сломал уже мозг и пальцы об клавиатуру, но не могу получить последнюю запись из массива
есть такая вот фунька:

function get_all_threads_list($user_id, $order_by = 'DESC')
    {
        $sql = 'SELECT m.*, s.status, t.subject, ' . USER_TABLE_USERNAME .
        ' FROM ' . $this->db->dbprefix . 'msg_participants p ' .
        ' JOIN ' . $this->db->dbprefix . 'msg_threads t ON (t.id = p.thread_id) ' .
        ' JOIN ' . $this->db->dbprefix . 'msg_messages m ON (m.thread_id = t.id) ' .
        ' JOIN ' . $this->db->dbprefix . USER_TABLE_TABLENAME . ' ON (' . USER_TABLE_ID . ' = m.sender_id) '.
        ' JOIN ' . $this->db->dbprefix . 'msg_status s ON (s.message_id = m.id AND s.user_id = ? ) ' .
        ' WHERE p.user_id = ? group by m.thread_id ORDER BY t.id ' . $order_by. ', m.cdate '. $order_by;

        $query = $this->db->query($sql, array($user_id, $user_id));
        return $query->result_array();
}


в двух словах - она формирует массив из сообщений в связке с таблицей получателей, естественно из-за group by выводит только первое значение, если group by убрать, то выводится просто весь список сообщений. Решение где-то на поверхности, но не могу допетрить. Подсобите пожалста?

----------

UPD:

sqlfiddle.com/#!2/b1dab2/1

сейчас выводится id 2 и 1
если убрать GROUP BY m.thread_id то будет выводиться id 4, 2, 1
а нужно чтобы выводился id 4 и 1
т.е. по сути в group_by должно выбираться последнее значение, сейчас же выбирается первое
  • Вопрос задан
  • 2692 просмотра
Решения вопроса 1
conf
@conf
Ruby developer
Попробуйте так:
JOIN (SELECT * FROM msg_messages ORDER BY cdate DESC) m ON (m.thread_id = t.id)

И на cdate не помешал бы индекс.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы