我正在进行用户聊天,但我找不到合适的SQL查询来获取所有内容 消息列,获取发送的所有成员列以及仅使用用户x和用户y接收的所有成员列。
我不想在消息中创建如:receiving_mem_id和sending_mem_id这样的行,因为在“房间”中有一些用户与另一种类型的聊天。
你能给我一些帮助吗?
以下是我尝试使用的查询:
Select me.mem_id
, me.mem_nickname
, me.isConnected
, me.isBreeder
, m.mess_id
, m.mess_text
, m.mess_date
From PSU.Member As me
, message As m
, send As s
Where me.mem_id = s.mem_id
And s.mess_id = m.mess_id
And s.mess_id In (Select re.mess_id
From message As m
, PSU.Member As me
, receive As re
Where m.mess_id = re.mess_id
And re.mem_id = (Select mem_id
From PSU.Member
Where mem_id = :mem_id
));
但我遇到的问题是任何成员都可以看到发送给目标成员的消息。
答案 0 :(得分:1)
编辑:根据您的评论,我修改了查询。如果您需要在member
表的某些字段上过滤已发送的消息,请添加联接和过滤数据。
select me.mem_id
, me.mem_nickname
, me.isConnected
, me.isBreeder
, m.mess_id
, m.mess_text
, m.mess_date
from member me
join receive r on me.mem_id = r.mem_id
join message m on r.mess_id = m.mess_id
where me.mem_id = :mem_id
and m.mess_id in (
select mess_id
from send s
where mem_id = :another_mem_id
)
order by m.mess_date desc