簡體   English   中英

查詢這些表的最佳方法是什么

[英]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
  1. 用戶 - id,用戶名

  2. 聊天 - id,聊天名

  3. 聊天用戶 ID、用戶 ID、聊天 ID

  4. 帖子 - 帖子、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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM