我正在建设一个与社交网络相同的响应式网站,我有4个表 checkin
friend
post
notification
。
这是notification
表的结构:
Notification
id
user_id
activity_type
source_id
created_date
created_by
updated_date
updated_by
活动类型是一个字符串,比如,“friendrequest”表示有人接受了好友请求,“checkin”表示有人签到参加某个事件,“post”表示有人发表了帖子。
现在每当这些操作中任何一个被触发时,我都会将数据存储在“通知”表中,但我不确定应该如何将数据显示在已登录用户的列表中。在“通知”表中的数据如下:
id user_id activity_type source_id created_date
5 1 friend 488 2015-10-13
6 48 checkin 10 2015-10-13
7 1 checkin 9 2015-10-13
8 9 friend 7 2015-10-13
9 1 checkin 27 2015-10-13
10 48 post 18 2015-10-13
11 9 checkin 8 2015-10-13
根据
activity_type
,source_id
将连接到 event
、checking
或者 post
表。那么我应该使用哪个查询来正确地显示通知。另外,我如何控制通知的获取,比如只向用户的好友显示任何活动。
我使用了这个查询,但它没有正常工作。
SELECT
group_concat(`user_id`) as 'users',
`activity_type`,
`source_id` as 'post'
FROM
`notification`
WHERE
`source_id` IN ("488")
GROUP BY
`source_id`,
`activity_type`
ORDER BY
`source_id`
如果有在线的示例项目,请告诉我。根据我在这里得到的答案,我写了这个查询语句。如果还有其他改进的方式,请让我知道。
SELECT
notification.*,event.title
FROM
notification
INNER JOIN
event
ON
event.id = notification.source_id
AND
notification.activity_type = "checkin"
WHERE
notification.user_id in (488,489)
UNION
SELECT
notification.*,user.firstname FROM notification
INNER JOIN
user
ON
user.id = notification.source_id
AND
notification.activity_type = "friend"
WHERE
notification.user_id in (488,489)
我应该怎么做才能找到已登录用户的朋友? 我需要写另一个查询吗?
Select friend_id from friend where user_id=1
保存id
数组并将其传递给上面的notification
查询,有没有其他方法可以不写2个不同的查询来完成这个任务?
notification_read
来跟踪它是否已读,并且我会在其中插入数据以追踪其是否已读... - Mike Ross