-
需求
-
需要查詢小說是否有斷更,小說章節信息表中有發布時間:pub_time,如果發布時間間隔超過三天就算斷更
思路
-
查詢小說章節信息表,將章節信息按照發布時間排序,加上行號。生成table1 和table2 信息一樣
-
left join 關聯查詢,table1行號為 n 與 table2行號為n+1的數據發布時間比較,如果存在大于三天則說明斷更
準備工作
章節表:
CREATE?TABLE?`t_chapter`?(??`id`?varchar(255)?NOT?NULL?COMMENT?'主鍵',??`auto_code`?varchar(255)?NOT?NULL?COMMENT?'編號',??`production_number`?varchar(11)?NOT?NULL?COMMENT?'作品編號',??`pub_time`?datetime?DEFAULT?NULL?COMMENT?'發布時間',??PRIMARY?KEY?(`id`) )?ENGINE=InnoDB?DEFAULT?CHARSET=utf8
-
開始
-
對章節表根據發布時間升序排序并顯示行號
????????SELECT ????????????t.auto_code?, ????????????t.id?, ????????????t.production_number?, ????????????t.pub_time?, ????????????(@rowNum?:=@rowNum?+?1)?AS?rowNo????????FROM ????????????t_chapter?t?, ????????????(SELECT(@rowNum?:=?0))?b????????WHERE? ???????????t.production_number?=?1414(指定作品)????????ORDER?BY ????????????t.pub_time?ASC
查詢結果已經按照發布時間排序
-
關聯查詢
????SELECT ????????count(1)????FROM ????????(????????????SELECT ????????????????t.auto_code?, ????????????????t.id?, ????????????????t.production_number?, ????????????????t.pub_time?, ????????????????(@rowNum?:=@rowNum?+?1)?AS?rowNo????????????FROM ????????????????t_chapter?t?, ????????????????(SELECT(@rowNum?:=?0))?b????????????WHERE ????????????????t.production_number?=?979??? ????????????ORDER?BY ????????????????t.pub_time?ASC ????????)?table1????INNER?JOIN(????????SELECT ????????????t.auto_code?, ????????????t.id?, ????????????t.production_number?, ????????????t.pub_time?, ????????????(@a?:=@a?+?1)?AS?rowNo????????FROM ????????????t_chapter?t?, ????????????(SELECT(@a?:=?0))?b????????WHERE ????????????t.production_number?=?979 ????????ORDER?BY ????????????t.pub_time?ASC ????)?table2?ON?table1.rowNo?+?1?=?table2.rowNo? ????WHERE ????????timestampdiff(DAY?,?table2.pub_time?,?table1.pub_time)?>?3;
如果查詢count>0則作品編號為979的作品存在斷更,更多條件可以依據自己業務而定
說明:
這里用到了@,最開始我也不知道這是什么東西,然后我搜索mysql行號查到使用自定義變量(mysql特性)進行排序顯示
參考博客:
SQL Server查詢行號
MYSQL rownum 實現
MYSQL 自定義變量使用(推薦)
-
需求
-
需要查詢小說是否有斷更,小說章節信息表中有發布時間:pub_time,如果發布時間間隔超過三天就算斷更
思路
-
查詢小說章節信息表,將章節信息按照發布時間排序,加上行號。生成table1 和table2 信息一樣
-
left join 關聯查詢,table1行號為 n 與 table2行號為n+1的數據發布時間比較,如果存在大于三天則說明斷更
準備工作
章節表:
CREATE?TABLE?`t_chapter`?(??`id`?varchar(255)?NOT?NULL?COMMENT?'主鍵',??`auto_code`?varchar(255)?NOT?NULL?COMMENT?'編號',??`production_number`?varchar(11)?NOT?NULL?COMMENT?'作品編號',??`pub_time`?datetime?DEFAULT?NULL?COMMENT?'發布時間',??PRIMARY?KEY?(`id`) )?ENGINE=InnoDB?DEFAULT?CHARSET=utf8
-
開始
-
對章節表根據發布時間升序排序并顯示行號
????????SELECT ????????????t.auto_code?, ????????????t.id?, ????????????t.production_number?, ????????????t.pub_time?, ????????????(@rowNum?:=@rowNum?+?1)?AS?rowNo????????FROM ????????????t_chapter?t?, ????????????(SELECT(@rowNum?:=?0))?b????????WHERE? ???????????t.production_number?=?1414(指定作品)????????ORDER?BY ????????????t.pub_time?ASC
查詢結果已經按照發布時間排序
-
關聯查詢
????SELECT ????????count(1)????FROM ????????(????????????SELECT ????????????????t.auto_code?, ????????????????t.id?, ????????????????t.production_number?, ????????????????t.pub_time?, ????????????????(@rowNum?:=@rowNum?+?1)?AS?rowNo????????????FROM ????????????????t_chapter?t?, ????????????????(SELECT(@rowNum?:=?0))?b????????????WHERE ????????????????t.production_number?=?979??? ????????????ORDER?BY ????????????????t.pub_time?ASC ????????)?table1????INNER?JOIN(????????SELECT ????????????t.auto_code?, ????????????t.id?, ????????????t.production_number?, ????????????t.pub_time?, ????????????(@a?:=@a?+?1)?AS?rowNo????????FROM ????????????t_chapter?t?, ????????????(SELECT(@a?:=?0))?b????????WHERE ????????????t.production_number?=?979 ????????ORDER?BY ????????????t.pub_time?ASC ????)?table2?ON?table1.rowNo?+?1?=?table2.rowNo? ????WHERE ????????timestampdiff(DAY?,?table2.pub_time?,?table1.pub_time)?>?3;
如果查詢count>0則作品編號為979的作品存在斷更,更多條件可以依據自己業務而定
說明:
這里用到了@,最開始我也不知道這是什么東西,然后我搜索mysql行號查到使用自定義變量(mysql特性)進行排序顯示
相關文章:
相關視頻: