group_by и order_by с codeigniter - PullRequest
       1

group_by и order_by с codeigniter

0 голосов
/ 18 марта 2012

Я пытаюсь понять это, но безуспешно. Я продолжаю получать странные результаты! Во-первых, у меня есть база данных MySQL с несколькими строками, структура выглядит так:

ID MESSAGE_ID СООБЩЕНИЕ ВРЕМЯ ДАТА

Теперь, message_id может быть одним и тем же несколько раз, и здесь начинается моя проблема. Я хочу выбрать последнюю строку сортировки дублированного message_ID по идентификатору.

Итак, допустим, у меня нормальный запрос get, и результат выглядит следующим образом,

Array
(
    [0] => Array
        (
            [id] => 3
            [message_id] => 1
            [from_user_id] => 3
            [to_user_id] => 1
            [message] => last
            [time_sent] => 1331874924
            [date_sent] => 16/03/2012
            [opened] => 0
            [ip] => ::1
            [deleted] => 0
            [reported] => 0
        )

    [1] => Array
        (
            [id] => 2
            [message_id] => 1
            [from_user_id] => 3
            [to_user_id] => 1
            [message] => middle
            [time_sent] => 1331874920
            [date_sent] => 16/03/2012
            [opened] => 0
            [ip] => ::1
            [deleted] => 0
            [reported] => 0
        )

    [2] => Array
        (
            [id] => 1
            [message_id] => 1
            [from_user_id] => 3
            [to_user_id] => 1
            [message] => first
            [time_sent] => 1331874916
            [date_sent] => 16/03/2012
            [opened] => 0
            [ip] => ::1
            [deleted] => 0
            [reported] => 0
        )

    [3] => Array
        (
            [id] => 4
            [message_id] => 2
            [from_user_id] => 3
            [to_user_id] => 1
            [message] => test
            [time_sent] => 1331874916
            [date_sent] => 16/03/2012
            [opened] => 0
            [ip] => ::1
            [deleted] => 0
            [reported] => 0
        )

) 

Теперь я хочу удалить дубликаты message_id и получить только это (обратите внимание, как должно быть упорядочено по идентификатору)

Array
(
    [0] => Array
        (
            [id] => 3
            [message_id] => 1
            [from_user_id] => 3
            [to_user_id] => 1
            [message] => last
            [time_sent] => 1331874924
            [date_sent] => 16/03/2012
            [opened] => 0
            [ip] => ::1
            [deleted] => 0
            [reported] => 0
        )

    [1] => Array
        (
            [id] => 4
            [message_id] => 2
            [from_user_id] => 3
            [to_user_id] => 1
            [message] => test
            [time_sent] => 1331874916
            [date_sent] => 16/03/2012
            [opened] => 0
            [ip] => ::1
            [deleted] => 0
            [reported] => 0
        )

)

То, что я пытался сделать раньше, это

$this->db->order_by(‘id’, ‘DESC’);
$this->db->group_by(‘message_id’);

и

$this->db->group_by(‘message_id’);
$this->db->order_by(‘id’, ‘DESC’);

но я не получаю последние результаты из message_id, только первый (похоже, что он не сохраняется перед удалением или что-то в этом роде?)

Любая помощь будет отличной!

1 Ответ

0 голосов
/ 18 марта 2012

Мне удалось это с этим на моих столах:

select * from 
    (select * from da_user_messages order by id desc) t 
where receiver=1 group by msg_session

в вашем случае msg_session - это message_id, получатель - to_user_id, а da_user_messages - имя вашей таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...