SELECT COUNT有两种情况查询

时间:2017-06-16 11:47:34

标签: mysql sql database case

希望你做得好! 我来介绍一下我的数据库。

我有三张桌子,我假设我应该通过获得我需要的结果。

以下是所有表格的属性:

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表示通知是关于事件的,idnotification_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

0 个答案:

没有答案