首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >MariaDB & Android -实现消息功能,分别选择用户和消息

MariaDB & Android -实现消息功能,分别选择用户和消息
EN

Stack Overflow用户
提问于 2018-07-12 01:59:35
回答 1查看 168关注 0票数 1

我有一个消息表。

它的列是

| seq | sender_email | receiver_email | content | date | is_read | sender_profile_icon_url|

在我的Android应用程序中,我想首先显示用户列表。

你可以想象普通的消息应用程序,比如Kakaotalk,Line,Whatsapp等。

代码语言:javascript
复制
If A ever sent a message to B OR if B ever sent a message to A.

1. A's view

B's information(email, photo) with the most recent message between
B and A must be shown in the list(MessageUserList Activity) of A.
If you click B, you see all the messages between B and A.

2. B's view

A's information(email, photo) with the most recent message between
A and B must be shown in the list(MessageUserList Activity) of A.
If you click B, you see all the messages between B and A.

因此,它将看起来像这样(chanjungskim@gmail.com的视图):

左图:显示发送或接收过至少一条消息的用户。

右图:点击第一个用户后显示所有消息(fman1335@gmail)。

你应该知道的是,你可以向自己发送消息。然后,所有的消息都将以绿色放置在右侧。

照片看起来很完美。但事实并非如此。

我试着用左边的图片是...

代码语言:javascript
复制
select  m3.*
    from
        ( SELECT  m1.*
            from  message as m1
            left outer join  message as m2  ON m1.sender_email = m2.sender_email
              and  (m1.date < m2.date
                      or  (m1.date = m2.date
                              and  m1.seq < m2.seq)
                   )
            where  m2.sender_email is null
        ) as m3
    where  m3.sender_email=?
       or  m3.receiver_email=?
    order by  date desc
    limit  30;

我试着用正确的图片是...

代码语言:javascript
复制
select  *
    from  message
    where  sender_email=?
       or  receiver_email=?
       or  sender_email=?
       or  receiver_email=?
    order by  date;

它带来了错误的数据。

目前的问题是

如果A和B互相发送消息,则A和B在两端的MessageUserList活动上。它需要分别为1(例如A看到B,B看到A)。如果A单击列表中的A用户,则会带来错误的数据。

我不知道我需要修复什么。有什么问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-12 03:37:19

查找“最后一封”电子邮件:

代码语言:javascript
复制
SELECT  *
    FROM  message
    WHERE  sender_email = ...
    ORDER BY  date DESC, seq DESC
    LIMIT  1;

这比使用LEFT JOIN简单得多,速度也快得多。

“正确”的查询需要使用这个,我认为:

代码语言:javascript
复制
SELECT  * FROM message
    WHERE  ( sender_email= A  AND  receiver_email = B )
       OR  ( sender_email= B  AND  receiver_email = A )
    ORDER BY date
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51291701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档