[英]What is the best way to query these tables
我有 4 個表,我正在嘗試獲取屬於 id 為 1 的用戶的所有聊天記錄,我可以在下面的查詢中執行此操作,但是我不確定它的效率如何。
其次,我想通過獲取聊天中的所有其他用戶以及 ID 為 1 的用戶來使這個查詢更加復雜,但是我不確定如何執行此操作。
select * from chat_users left join chats on chat_users.chat_id = chats.id left join users on chat_users.user_id = users.id where user_id = 1
用戶 - id,用戶名
聊天 - id,聊天名
聊天用戶 ID、用戶 ID、聊天 ID
帖子 - 帖子、ID、文本
例如
如果我們將聊天表想象為:
id : 1 | chatname : FirstChat
Chat_users 作為
id : 1 | user_id : 1 | chat_id : 1
id : 2 | user_id : 2 | chat_id : 1
用戶作為
id: 1 | username: firstUser
id: 2 | username: secondUser
我最終希望得到一個查詢,該查詢返回 user1 參與的所有聊天以及他們聊天中其他用戶的數據,但是我不確定我會怎么做?
這是表達查詢的一種方法:
select c.*, u.*
from chat_users cu
inner join chats c on c.id = cu.chat_id
inner join users u on u.id = cu.user_id
where exists (
select 1 from chat_users cu1 where cu1.chat_id = cu.chat_id and cu1.user_id = 1
)
也許你只是想要一個聚合:
select chat_id,
group_concat( case when cu.user_id <> 1 then user_id end) as other_users
from chat_users cu
group by chat_id
having sum( cu.user_id = 1 ) > 0;
這將返回聊天 ID 和用戶——這正是您所要求的。 如果需要,您可以加入其他信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.