我有两个表:smiles
和messages
。我想显示两个表中的所有记录:
我在这里使用'或',因为有时user_id
是[{1}}或messages
的发件人,有时smiles
是user_id
的接收者,{ {1}}我希望显示messages
所在的所有记录。
对于向其他smiles
发送消息或微笑的每个成员,我还希望总计user_id
+ messages
。
我想显示如下数据
smiles
这是消息的表结构
user_id
微笑结构
sender_user_name---Message+Smiles Count---Logged_user-------message
user_123 --------------6------------------You're Sender-----this is the last message
user_333--------------12------------------You're Receiver---this is the last message
我尝试使用带有WHERE子句的UNION获取所有记录,但没有成功。将不胜感激任何帮助。
消息和微笑是两个不同的表
这里有一些澄清
如何形成'消息+微笑计数' - >将user_007计为正在检查消息和微笑的登录用户。在他的帐户中,user222向他发送了2条消息,user333向他发送了5条微笑,并且他自己向用户555发送了3条消息。所以out put将是
user222 2 received Message Details
user333 5 Received smile type
You 3 sent to user555 message details
此处仅显示最后一条消息或笑脸。因此,如果user_123向user_007发送了6条消息和1条微笑,则计数将为7,并且将显示最后一条消息或微笑,如果user_007向另一个user_567发送消息,则它将显示在第二行中,依此类推。是有问题的,我还包括表格结构。感谢您的努力
答案 0 :(得分:0)
您可以通过单独添加来获得“消息加微笑”计数:
select (s.numsmiles + m.nummessages)
from (select count(*) as numsmiles
from smiles s
where $user_id in (s.toid, s.senderid)
) s cross join
(select count(*) as nummessages
from messages m
where $user_id in (m.sender_id, m.receiver_id)
) m;
关键是你要分别计算每个值,然后将这些值加在一起。
编辑:
如果您希望所有用户使用此功能,那么最好的方法是将union all
与group by
一起使用:
select userId, sum(hasSmile) as NumSmiles, sum(hasMessage) as NumMessages,
sum(hasSmail + hasMessage) as NumSmilesAndMessages
from ((select s.toid as userId, 1 as hasSmile, 0 as hasMessage
from smiles s
) union all
(select s.senderid, 1 as hasSmile, 0 as hasMessage
from smiles s
) union all
(select m.sender_id, 0, 1
from messages m
) union all
(select m.receiver_id, 0, 1
from messages m
)
) t
group by user_id