簡體   English   中英

如何在mysql中檢索帶有發送者和接收者用戶名的聊天消息

[英]How to retrieve a chat msg with sender and receiver username in mysql

chat Table
-------------------------------------------------------
msg_id  msg(description of msg)   sender(id)   receiver(id)
-------------------------------------------------------
1       hello                      2             1
1       how are you                1             2
----------------------------------------------------------

user table
-----------------------
u_id   username
-----------------------
1       usman
2       Ali
---------------------

在這里你看到兩張表,一張用於聊天,一張供用戶使用,我在這兩個表之間建立了關系,但我覺得如何從這些表中提取數據很困難。

我想要的是..

我想用它的用戶名和每個接收者的名字提取每個發件人的 msg 和它的用戶名,比如 facebook 聊天,所以我做這個查詢

我把這個查詢放在數據庫中

select u.user_name UserName,msg.msg
from user u,messages msg 
where (msg.sender or msg.receiver)=(select u_id from user where u_id= 1 )
    and msg.sender=1
order by msg.msg_id desc

但是這個查詢重復發送者消息與接收者名稱和接收者消息與發送者名稱

我想用他們的名字分開顯示發送者和接收者的 msg 顯示告訴我我如何修復它的任何方法。

你所擁有的永遠不會奏效。 or比較將返回一個布爾值真/假值,然后您將其與u_id的值進行u_id 並且由於u_id查詢被硬編碼為僅返回1 ,因此您可以有效地執行where true/false = 1

您需要兩次加入user表(一次是接收者,一次是發送者):

SELECT sender.user_name, receiver.user_name, msg.msg
FROM msg
LEFT JOIN user AS sender ON msg.sender_id = sender.u_id
LEFT JOIN user AS receiver ON msg.receiver_id = receiver.u_id
ORDER BY msg.msg_id
  select users.name, messages.msg ....          Etc from messages inner join users on       msgs.userid = user.id where                             (sender = :sndr and receiver = :rcvr)         or (sender = :rcvr and receiver= :sndr)  order by date desc;        
                take note of the named parameters there.  That would return the conversation between the two users 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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