내 소셜 네트워킹 앱에 대한 알림 체계를 만들고 있습니다. 나는 서로 다른 종류의 알림을 두 그룹으로 분류합니다 : 친구 관련 및 이벤트 관련. 현재 데이터베이스 스키마는 다음과 같습니다.IF-ELSE를 사용하여 MySQL에서 조건부 결합 문
+---------------------+------------------------+------+-----+---------+----------------+
| 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
, 통지의 info-edited
유형, 그것을 재산의 다른 종류를 위해 필요한 각 (4 개 이상의 테이블을했습니다 예 : kicked
에는 이유가 필요함).
는 지금, 나는 notification_type
그렇지 않으면 다른 event
경우는 event_notification
로 notification
에 참여하도록 조건부 SQL 쿼리를 작성합니다.
SELECT * FROM notification_table t WHERE t.seen = FALSE 및 t.user_id =? INNER JOIN event_notification ko ON (t.notification_type = '이벤트'AND en.notification_id = t.notification_id) INNER JOIN .....
더 많은 내부 조인이있을 것입니다. ? 나는 나의 쿼리가 매우 최적화되지 않았다고 생각한다. 도움을 줄 수 있다면 감사하겠다.
결과를 어떻게 보이시겠습니까? 다른 모든 테이블과 조인을 제안하지만'notification_table'에서 열만 리턴합니다. –
알림을 위해 하나의 표를 갖는 것이 더 쉬울 것입니다. 알림 중 하나에 이유가 필요하기 만해도 다른 유형도 해당 테이블을 사용할 수 없으며 그 이유 필드가 null이되지 않음을 의미하지는 않습니다. – Richard