2016-12-15 23 views
1

我正在處理用戶聊天,但是我還沒有找到正確的SQL查詢來獲取所有 消息列,獲取所有發送的成員列和所有隻接收與用戶x和用戶y。正在爲用戶聊天查詢SQL查詢

我不想在消息中創建類似於:receiving_mem_id和sending_mem_id的行,因爲與「房間」中的某些用戶存在另一種類型的聊天。

這裏是我的數據庫: enter image description here

你能給我一些幫助?

這裏是我嘗試使用查詢:

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 
                )); 

但我遇到的問題是,任何成員都可以看到發送到目標成員的郵件。

+1

你能舉一個你想要什麼(你想要的輸出是什麼)和你已經嘗試過的例子嗎? – Seb

+0

請參閱http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-查詢 – Strawberry

回答

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 
+0

差不多! 在這裏,我收到來自mess_id的所有消息。需要一個過濾器來發送所有消息:來自另一個mem_id的mem_id –

+0

@ G.Lulu找到上面更新的SQL。 – vtuhtan

+0

是的,這很好!問題:我必須做兩次這個查詢。一個用這個查詢,第二個用reverse:mem_id用:another_mem_id顯示所有的聊天 –