我有三张桌子,我假设我应该通过获得我需要的结果。
以下是所有表格的属性:
tb1 - 通知
CREATE TABLE `notifications` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`notification_type` int(11) NOT NULL,
`notification_data` int(11) DEFAULT NULL,
`source_id` int(11) DEFAULT NULL,
`is_read` int(2) DEFAULT 2,
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1549 DEFAULT CHARSET=utf8
tb2 - user_notifications
CREATE TABLE `user_notifications` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`notification_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `user_id` (`user_id`),
KEY `notification_id` (`notification_id`),
CONSTRAINT `user_notifications_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `user_notifications_ibfk_2` FOREIGN KEY (`notification_id`) REFERENCES `notifications` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=1607 DEFAULT CHARSET=utf8
tb2 - 活动
CREATE TABLE `events` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=244 DEFAULT CHARSET=utf8
所以在这种情况下,我想用我的查询所有这三个表(目前我只使用前两个):我向用户显示所有未读通知,但是通知是与不再存在的事件相关的信息也会显示,并且这些事件很久以前就被删除了,并且这是因为我为每个通知分配,如果notification type
表示通知是关于事件的,id
或notification_data
的事件的source_id
取决于notification_type
。我之所以这样做是因为我需要访问这些事件,但如果事件被删除,我没有在UI中显示该通知。问题是用户将检查通知并查看2个新通知的计数器,但没有,因为这些通知与事件表行相关,不再存在。
总结所有这些,这就是查询的外观,如果notification_type
介于8和18之间,请检查notification_data
表中是否存在events
(事件的id)值{ {1}}属性,但是当notification_type为16时还有一个案例,然后检查id
source_id
表中是否存在events
(事件的id)值。
这是用于阅读所有用户的未阅读通知的查询:
id property
如果有人可以给我一些提示从哪里开始,我将不胜感激。我听说过SELECT COUNT(n.id) as unread_notifications FROM notifications n, user_notifications un WHERE n.id = un.notification_id AND un.user_id = ? AND n.isRead = 2
陈述和IF
陈述。我应该从那里开始?
注意:
CASE
修改
以下是php中的解决方法:
notification_type (8 - 15) id of event assigned to notification_data column
notification_type (16) id id of event assigned to source_id column
notification_type (17-18) id of event assigned to notification_data column