2012-08-13 73 views
0

我有两张通知表和一张friend_list表。一个通知tbale是指具有通知信息的人员创建并输入的信息,以及所有第二个标识哪个朋友已阅读通知。能够检索由用户创建的通知仅显示给用户的朋友。但是现在我想从名为notification read的第二张表中显示未读给用户朋友的通知。数据库查询获取用户朋友阅读的通知

我所做的查询(从通知+ 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"); 

现在如何获得通知的朋友读?

第二个表是

uid (friend_id) 
notification_id 
is_read 

现在我想用我现有的查询来获取被朋友未读通知的查询。

回答

0

让我们supose说:

  • '$id'是用户加薪通知
  • n.user_id的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评论。

+0

我们使用3代三个表在这里,通知+ FRIEND_LIST(我给查询)和notification_read(我希望所有的3人组合的查询) – 2012-08-13 10:34:25

+0

固定。请注意,我没有全部的数据模式细节。这是一种方法。你可以根据你的需求做出最后的改变。如果出现问题,请寻求更多帮助。 – danihp 2012-08-13 13:53:05

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

我们在这里使用3个三表,通知+ friend_list(我给出的查询)和notification_read(查询我想要的所有3个组合) – 2012-08-13 10:34:54

+0

nope不工作,它没有得到任何通知。不能我得到一个单独的查询来获取未读的通知,因为我已经做了一个查询来根据朋友得到通知,我只是需要那些未读的使用第二个表 – 2012-08-13 10:46:44

相关问题