如何使用不同类型的通知从数据库中检索通知

时间:2012-01-07 09:19:02

标签: php mysql notifications

我正在研究像facebook这样的通知系统。

我的数据库结构

enter image description here

我已经制作了type_id,例如通知类型。 [墙评论,墙贴等]

问题是如何从通知中检索数据,如使用时间戳我可以根据更新的日期或时间获取数据,但仍然在获取类型后。如何将类型与其他表格匹配,以显示结果,如Facebook中的随机通知。任何人都可以帮我解决数据库查询问题。

喜欢类型

墙评论 - 我必须从墙评论和通知表中检索数据

墙贴 - 我必须从墙贴和通知表中检索数据

如何根据以后的时间戳组合它们并按照这样的结果获得结果

例如

rahul在2小时前发布在你的墙上

ritu在1小时前对你的帖子发表评论

任何人都可以帮忙吗?

2 个答案:

答案 0 :(得分:3)

我不会尝试在一个查询中完成所有操作。我宁愿做几个小的简单查询,一个用于每种类型的实体(墙贴,评论等),然后用PHP代码汇总结果并发送给客户端。

不要过于复杂化,已经存在很多复杂性。 : - )

查询示例:

SELECT p.*, n.*
FROM notifications n
INNER JOIN wall_posts p ON p.id = n.item_id
WHERE n.type_id = 'wall_post' AND n.is_seen = 0;
ORDER BY time_stamp DESC
LIMIT 10;

SELECT c.*, n.*
FROM notifications n
INNER JOIN wall_comments c ON c.id = n.item_id
WHERE n.type_id = 'wall_post' AND n.is_seen = 0;
ORDER BY time_stamp DESC
LIMIT 10;

答案 1 :(得分:1)

这取决于您在其他表中的数据结构。如果它是相似的(或者至少可以用类似的方式进行总结)那么你可以使用像这样的UNION

SELECT * FROM
  ( 
    SELECT date,title,summary FROM notifications 
      INNER JOIN wall_comments ON (item_id=item_id AND type_id='wall_comments')
      WHERE user_id=X
  ) UNION
  ( 
    SELECT date,title,summary FROM notifications 
      INNER JOIN wall_posts ON (item_id=item_id AND type_id='wall_posts')
      WHERE user_id=X
  ) UNION 
  ( etc..
  )
ORDER BY date desc

您可能希望将其他子句放入WHERE子子句中以限制子查询。如果您真的发现性能问题,可能需要查看将数据非规范化到一个包含相关信息的表中。