我正在嘗試實現乙個通用的通知系統。
notification_base:id,type,object
notificiation_sub:id,user_id,not_base_id,lastnotifytime
notification_action:id,user_id,not_base_id,action,creationdate
因此,基本方案是,使用者通過發布狀態來建立通知基礎項,或上傳**等(在這種情況下,**是指notify_base表中的型別字段,而object_id是post_id或photo_id取決於型別)然後使用者訂閱為此通知基專案。(使用者3訂閱notification_base
5,最後通知時間x)
我想要的是如果上次notifiytime小於通知操作,則從使用者訂閱中獲取notification_base專案,然後將它們與notification_action一起加入。
對於使用者id 3;
select * from notification_action
inner join notification_base on notification_action.not_base_id = notification_base.id
inner join notification_sub on notification_action.not_base_id = notification_sub.not_base_id
where notification_sub.user_id = 3 and notification_sub.lastshowdate < notification_action.creationdate ;
結果幾乎就是我想要的
使用者x對您的物件執行了「操作」,該物件在時間t具有「型別」和object_id
但我也想根據型別來連線object_id。因此,我可以實際了解所接觸的物件。但是如您所見,type是動態的,如果type = post object
id引用了post表上的post_id,如果type = photo object id引用**表等上的photo_id。
我嘗試這樣做,但是出現語法錯誤;
select *
from notification_action
inner join notification_base
on notification_action.not_base_id = notification_base.id
inner join notification_sub
on notification_action.not_base_id = notification_sub.not_base_id case notification_base.type
when 'photo'
then (
inner join photo
on photo.id = notification_base.object_id
else (
inner join post
on post.id = notification_base.object_id
endwhere notification_sub.user_id = 3
and notification_sub.lastshowdate < notification_action.creationdate;
我知道這是不正確的,就像偽**
mysql遠端連線條件 MySql 遠端連線的條件
1 首先看伺服器防火牆 引用 centos 7.0預設使用的是firewall作為防火牆,使用iptables必須重新設定一下 1 直接關閉防火牆 systemctl stop firewalld.service 停止firewall systemctl disable firewalld.serv...
02條件查詢 MySQL
條件查詢 語法 select 查詢列表 from 表明where 篩選條件 分類 一 按條件表示式刪選 條件運演算法 和 一樣 二 按邏輯表示式篩選 邏輯運算子 and or not 三 模糊查詢 萬用字元 代表任意多個字元,包括0個字元 代表乙個字元 注意 和 代表 和 like between ...
列舉mysql的約束條件 MySql約束條件彙總
約束條件約束條件是在表上強制執行的資料檢驗規則 用來保證建立的表的資料完整性和準確性 主要在兩方面對資料進行約束 空值和重複值 主鍵約束 primary key 每個表只能由乙個主鍵 主鍵值須非空不重複 可設定單字段主鍵,也可設定多欄位聯合主鍵 聯合主鍵中多個欄位的取值完全相同時,才違反主鍵約束 新...