像facebook这样的对话消息的SQL代码

时间:2013-11-15 15:16:12

标签: mysql sql

tbl_messages:

m_from----m_to----m_message----m_date--------m_time
1000------1001----hello-------------2013-02-01----12:11:11
1001------1000-----hi----------------2013-02-01----13:10:11
1000------1001-----how r u?-------2013-02-01----16:19:11
1001------1000-----fine------------(2013-01-26)---12:11:11
1002------1003-----ur age?---------2013-03-10--13:14:11
1003------1002-----25----------------2013-03-11--13:36:15
1002------1000-----ur name?-------2013-02-04--13:52:44
1002------1000-----rihanna----------2013-05-15--13:11:54
1000------1002-----im there---------2013-02-01--13:34:11
1000------1003-----im here----------2013-02-01--13:04:00

例如,用户(1000)=迈克尔想看到他的消息。 迈克尔应该只看到发送或接收消息的用户。

user(1000)=michael===messege send or receive====> user(1001)
user(1000)=michael===messege send or receive====> user(1002)
user(1000)=michael===messege send or receive====> user(1003)

我想要SQL代码,只有用户才会显示Michael与他们进行消息交换。结果是最后一条消息(发送或接收)ORDER BY(第一个)m_date(第二个)m_time

示例:(此结果适用于用户(1000))

user(1001)=david----------------------------------------------------time=16:19:11
send:slice of message(how r...)-----------------------------------date=2013-02-01

user(1002)=jenifer----------------------------------------------------time=13:11:54
received:slice of message(rihanna...)----------------------------date=2013-05-15

user(1002)=tom--------------------------------------------------------time=13:04:00
send:slice of message(im here...)----------------------------------date=2013-02-01

1 个答案:

答案 0 :(得分:2)

假设一个表tbl_users,其字段为u_id和u_name。

的内容
(SELECT m_from, u_name, u_time, 'sent', m_message, m_date
FROM tbl_messsages inner join tbl_users on tbl_messages.m_from = tbl_users.u_id)
UNION
(SELECT m_to, u_name, u_time, 'received', m_message, m_date
FROM tbl_messsages inner join tbl_users on tbl_messages.m_to = tbl_users.u_id)
ORDER BY m_date, m_time;

现在,MySQL可以为格式化做一些奇特的事情,但是如果我正确地阅读了你的例子,它就不能像那样,很可能,你不想这样做。数据库(MySQL和其他)不是为了进行复杂的格式转换,而是为了存储和检索信息。格式化可以用另一种语言在外面完成。