【问题标题】:Group mysql results by user按用户分组 mysql 结果
【发布时间】:2013-12-03 08:50:20
【问题描述】:

我想创建一个页面,列出当前用户发送的所有消息,以及其他成员发送给当前用户的所有消息,按用户分组结果并显示他们的最后一条消息(类似于短信列表):

Mysql 表:

用户表: 身份证、姓名、密码 消息表: id,messageSentedBy,messageSentedTo,messageData

我尝试过的查询(返回重复的消息):

select
    users.*,messages.*
from
    messages
left join users on user.name=messages.messageSentedBy
    or user.name=messages.messageSentedTo
where
    messages.messageSentedBy = current user name or
    messages.messageSentedTo = current user name

【问题讨论】:

  • 选择不同的 users.id,... ?
  • 这个问题之前已经在 SO至少 被问过十几次了。发帖前你搜索过答案吗?
  • distint 对安德烈没有多大帮助
  • 也许你可以给出一个示例表和一个示例输出?

标签: php mysql join group-by


【解决方案1】:

我想你想要这个

select m.*
from messages m
where 
    (m.sentBy = current user id
     or m.sentTo = current user id)
and not exists (
select 1 
    from messages m2 
    where m2.id > m.id 
    and m2.sentBy = m.sentBy 
    and m2.sentTo=m.sentTo))
order by user.name

这是假设消息 ID 是对最新消息的度量(具有时间戳列会更好)。

考虑使用 user.id 而不是 user.name 作为外键。

【讨论】:

  • Friso 感谢您的评论,但这不是我想要的,我需要为我联系的每个用户分组消息
  • 你能举个例子吗?给定什么输入,输出应该是什么?
  • 好吧,基本上只是显示一个页面,其中包含我从用户那里获得并为用户发送的消息,其中每个用户的消息组可以说我是用户一个,还有其他 4 个用户,我向用户发送了消息2,但没有得到他的答复,所以显示我的按摩我给用户 3 发送消息,他回答我,所以显示他的按摩,用户 4 给我发消息,我回答他,所以给他显示我的重播用户 5 给我发消息我没有回答的按摩所以显示他的信息
  • 有点像今天的智能手机短信系统,不像过去收件箱和发件箱
  • @user3040832 这就是您要寻找的答案吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-21
  • 1970-01-01
  • 2013-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多