我正在研究像facebook这样的通知系统。
我的数据库结构
我已经制作了type_id,例如通知类型。 [墙评论,墙贴等]
问题是如何从通知中检索数据,如使用时间戳我可以根据更新的日期或时间获取数据,但仍然在获取类型后。如何将类型与其他表格匹配,以显示结果,如Facebook中的随机通知。任何人都可以帮我解决数据库查询问题。
喜欢类型
墙评论 - 我必须从墙评论和通知表中检索数据
墙贴 - 我必须从墙贴和通知表中检索数据
如何根据以后的时间戳组合它们并按照这样的结果获得结果
例如
rahul在2小时前发布在你的墙上
ritu在1小时前对你的帖子发表评论
任何人都可以帮忙吗?
答案 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子子句中以限制子查询。如果您真的发现性能问题,可能需要查看将数据非规范化到一个包含相关信息的表中。