0

私はプライベート メッセージング システムに取り組んでいます。ソーシャル ネットワーク メッセージングのように見えます。タイトルはなく、関連する pms がフォーラム スレッドのように表示されます。

私はpmsを追跡するために2つのテーブルを持っています

pm_sessions  : pm_session  , sender , receiver, pm_counter 

pm           : id , pm_session  , text , date , sender

pm_session は pm のラッパーのように機能します

ユーザープロファイルで、現在のユーザーからpmを送受信しているユーザーのリストを表示したい

問題は、受信者と送信者のユーザーを別々に表示したくないことです。私の男と話しているすべてのユーザーを1つのリストに入れたいのです

これが私が念頭に置いていたものであり、今ではすべての IF ステートメントでこのように機能しません

$current_user = $_session['userid'];
    $query = " 

 select pms.sender , pms.receiver, 
 count(pms.otheruser) as total_dialogs_with_this_user , 
 u.username as other_user_name  , u.id as other_user_id

 from pm_session pms

   //// joining to the users table on the other user id
   if($current_user = pms.sender)
     JOIN users u on pms.receiver= u.id 
   if($current_user = pms.receiver)
     JOIN users u on  pms.sender = u.id 

  WHERE pms.reciver = $current_user || pms.sender = $current_user

   /// grouping by other user id
   if($current_user = pms.sender)
     group by pms.receiver
   if($current_user = pms.receiver)
     group by pms.sender ";

結果は次のようになると思います

HELLO max ... you have been talking to :

ross... 3 dialogs
joey ... 4 dialogs
chandler ... 5 dialogs

これは、受信者用と送信者用の 2 つのクエリで簡単に記述できますが、前述のように、それらを分離したくありません

4

1 に答える 1

2
SELECT   CASE $current_user
           WHEN pms.sender   THEN pms.receiver
           WHEN pms.receiver THEN pms.sender
         END                  AS other_user_id,
         u.username           AS other_user_name,
         COUNT(pms.otheruser) AS total_dialogs_with_this_user
FROM     pm_session           AS pms
  JOIN   users                AS u
           ON u.id = CASE $current_user
             WHEN pms.sender   THEN pms.receiver
             WHEN pms.receiver THEN pms.sender
           END
GROUP BY other_user_id, other_user_name
于 2012-05-31T09:01:52.723 に答える