Как получить сообщения в виде разговора? - PullRequest
2 голосов
/ 27 декабря 2011

У меня есть таблица сообщений, которая отлично работала с папками «Входящие», sent_items, архивом и т. Д.,

Но клиент хочет, чтобы сообщения были в представлении беседы.

Вот мойструктура таблицы сообщений,

Field             Type  
id                int(11) 
from_fb_uid       varchar(45)
to_fb_uid         varchar(45)
message_body      text
sent_datetime     datetime
read_status       tinyint(1)
archived          tinyint(1)

Сначала мне нужно отобразить самое последнее (только сообщение для каждого разговора, основанное на просмотре пользователя).

Когда я щелкаю сообщение разговора, мне нужно отобразить все сообщения как представление разговора.

Как только я знаю, что получатель и отправитель в разговоре, я использую следующий запрос, чтобы получитьсписок сообщений, основанный на sent_time (для сохранения вида разговора) ..

SELECT * FROM `user_message` 
WHERE 
(from_fb_uid='100002638144690' and to_fb_uid='100002564538409') 
or 
(from_fb_uid='100002564538409' and to_fb_uid ='100002638144690') 
order by 
sent_datetime desc

Но я не знаю, как получить список новых разговоров и вывести последнее сообщение в ветке разговоров ...

как это сделать?

Обновление:

Я изменил структуру таблицы с двумя сущностями как

 user_conversation table

    Field                          Type     

    conversation_id                int(11)
    sender_id_user                 int(11)
    sender_fb_uid                  varchar(45)
    receiver_id_user               int(11)
    receiver_fb_uid                varchar(45)
    sender_archive_status          tinyint(1)
    receiver_archive_status        tinyint(1)
    last_updated                   timestamp

 user_message table

    Field             Type  

    id                int(11) 
    from_fb_uid       varchar(45)
    to_fb_uid         varchar(45)
    message_body      text
    sent_datetime     datetime
    read_status       tinyint(1)
    archived          tinyint(1)

Теперь, как можно перечислить последниесообщение для пользователя с отправителем?

1 Ответ

0 голосов
/ 27 декабря 2011

Вы можете использовать подзапрос, чтобы найти последние 10 разговоров.Вы должны присоединиться назад, чтобы найти message_body для последнего сообщения.

select  um.from_fb_uid
,       um.to_fb_uid
,       um.message_body 
from    user_message um
join    (
        select  from_fb_uid
        ,       to_fb_uid
        ,       max(sent_datetime) as max_dt
        from    user_message um2
        group by
                from_fb_uid
        ,       to_fb_uid
        order by
                max(sent_datetime) desc
        limit   10
        ) as filter
on      filter.from_fb_uid = um. from_fb_uid
        and filter.to_fb_uid = um. to_fb_uid
        and filter.max_dt = um.sent_datetime
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...