0

通知用に2つのテーブルがあり、friend_list用に1つのテーブルがあります。1つの通知tbaleは、作成して入力した通知情報と、通知を読んだ友人をマークするすべてと2番目の情報を持っています。ユーザーが作成した通知を取得して、ユーザーの友達にのみ表示することができました。しかし、今度は、notification readという名前の2番目のテーブルから、ユーザーの友達には未読の通知を表示したいと思います。

私が行ったクエリは(notification + friend_listテーブルから)

$sql3=mysql_query("select n.*,f.friend_id,f.uid,f.status from notification n,friend_list f  where f.uid='$id' and f.status='1' and n.title_text='Global Notification'   and n.user_id in ('$id' , f.friend_id)  and n.owner_user_id=f.friend_id    order by n.time_stamp desc");

友達に未読の通知を受け取る方法は?

2番目のテーブルは

uid (friend_id)
notification_id
is_read

今、私は既存のクエリでクエリを実行して、友達に未読の通知を取得したいと思っています。

4

2 に答える 2

0

次のように仮定します。

  • '$id' 通知を発生させるユーザーのIDです
  • n.user_id通知を発生させるユーザーです
  • n.owner_user_id通知を受け取るユーザー

クエリは次のとおりです。

select 
   n.*,f.friend_id,f.uid,f.status 
from 
   notification n 
inner join
   friend_list f  
       on n.owner_user_id=f.friend_id  
inner join
   notification_read nr 
       on nr.notification_id = n.notification_id and
          nr.uid = f.friend_id
where 
   f.status='1' and 
   n.title_text='Global Notification'   and 
   n.user_id  = '$id' and
   nr.is_read = 0
order by n.time_stamp desc

新しいOPコメントにより編集されました。

于 2012-08-13T10:27:38.370 に答える
0

これを試して:

SELECT n.*,f.friend_id,f.uid,f.status
FROM notification n
     INNER JOIN friend_list f
        ON n.owner_user_id = f.friend_id
     INNER JOIN second_table s
        ON f.friend_id = s.uid AND
           n.notification_id = s.notification_id
WHERE f.uid='$id' AND
      f.status='1' AND
      n.title_text='Global Notification' AND
      n.user_id IN ('$id' , f.friend_id) AND
      s.is_read = 0
ORDER BY n.time_stamp DESC;
于 2012-08-13T10:27:49.103 に答える