我正在为我的社交网络应用程序制作通知方案。我有不同类型的通知,分为两组:朋友相关和事件相关。目前,我的数据库架构是这样的:
+---------------------+------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------------+------------------------+------+-----+---------+----------------+
| notification_id | int(11) | NO | PRI | NULL | auto_increment |
| notification_type | enum('event','friend') | NO | | NULL | |
| notification_date | datetime | NO | | NULL | |
| notification_viewed | bit(1) | NO | | NULL | |
| user_id | int(11) | NO | MUL | NULL | |
+---------------------+------------------------+------+-----+---------+----------------+
现在,我有两个不同的表格,分别是事件相关通知和朋友相关通知。以下是事件相关通知表的架构:
+-------------------------+----------------------------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------------------+----------------------------------------------------+------+-----+---------+-------+
| notification_id | int(11) | NO | PRI | NULL | |
| event_id | int(11) | NO | MUL | NULL | |
| event_notification_type | enum('added','kicked','new-message','info-edited') | NO | | NULL | |
+-------------------------+----------------------------------------------------+------+-----+---------+-------+
kicked
同样,对于每种, added
, new-message
,通知类型,我还有 4 个表格info-edited
,因为每个表格都需要具有不同类型的属性(例如,kicked
需要一个原因)。
现在,我想编写一个条件 SQL 查询,使其notification
与event_notification
if不同。notification_type
event
SELECT * FROM notification_table t WHERE t.seen = FALSE AND t.user_id = ? INNER JOIN event_notification en ON(t.notification_type='event' AND en.notification_id = t.notification_id) INNER JOIN .....
会有这么多的内部连接有没有更好的方法呢?我认为我的查询也不是很优化,如果可以提供任何帮助,将不胜感激。