mysql分段排序
需求:
一個活動表,記錄有開始時間欄位start_time,結束時間欄位end_time
需要分頁獲取全部欄位,總體上:
- 1.正在進行的活動排在最前部分(start_time < now < end_time)
這部分內部,按結束時間升敘,也就是即將結束的活動在前面。
- 2.即將開始的活動排在中間部分(now < start_time);
這部分內部,按開始時間升序,也就是即將開始的活動在前面。
- 3.已經過期的活動在最後部分(end_time < now)。
這部分內部,按結束時間降序,也就是最近結束的活動在前面。
分析:
根據條件,將(開始時間,結束時間)對映到一個整數序列,然後根據這個序列排序。
我找到的對映是這樣的:
首先確認一個“很大的數”Big。由於資料庫的時間範圍在1970-01-01 ~ 2038-01-19之間,值小於pow(2, 31),所以我確定的“很大的數”是Big=pow(2, 40);
對映
f(start_time, end_time)
{
if (start_time < now < end_time)
{
return end_time;
}
else if (now < start_time)
{
return start_time + pow(2, 40);
}
else if (end_time < now)
{
return (-1)*end_time + pow(2,41);
}
}
自己證明:end_time < start_time + pow(2, 40) < (-1)*end_time + pow(2,41)
然後,寫出的sql語句是:
SELECT id, start_time, end_time FROM lj_activity WHERE STATUS = 0 ORDER BY
IF (UNIX_TIMESTAMP(start_time)<=UNIX_TIMESTAMP(NOW()) AND UNIX_TIMESTAMP(NOW())<UNIX_TIMESTAMP(end_time),
UNIX_TIMESTAMP(end_time),
IF(UNIX_TIMESTAMP(NOW())<UNIX_TIMESTAMP(start_time),
UNIX_TIMESTAMP(start_time)+POW(2,40),
UNIX_TIMESTAMP(end_time)*(-1)+POW(2,41)
)
);
相關文章
- MySQL自定義排序MySql排序
- MySQL 對字串排序MySql字串排序
- MySQL入門——排序MySql排序
- MySQL中的排序MySql排序
- 分段與分頁
- 【分段傳輸】c#使用IAsyncEnumerable實現流式分段傳輸C#
- MySQL-排序資料MySql排序
- mysql相同數值排序MySql排序
- MySQL Order BY 排序過程MySql排序
- Mysql中的雙路排序和單路排序MySql排序
- pycharm如何分段執行PyCharm
- MySQL實現分組排序MySql排序
- MySQL:排序(filesort)詳細解析MySql排序
- 【MySQL】批次修改排序規則MySql排序
- Flutter 分段控制器 HBSegmentedControlFlutter
- 時間序列分段法
- 數列分段(二分)
- Windows記憶體管理-分段Windows記憶體
- mysql字符集和字元排序MySql字元排序
- MySQL order by 排序結果不正確MySql排序
- MySQL 預設排序真的是按主鍵來排序的嗎MySql排序
- 分段函式圖形繪製函式
- 零信任安全,從微分段做起
- Pycharm中分段執行程式碼PyCharm行程
- 聊聊MySQL是如何處理排序的MySql排序
- Mysql 分組排序的sql寫法MySql排序
- mysql自定義排序順序語句MySql排序
- 網路:IP地址分類和分段
- mysql5.6生成排序欄位MySql排序
- MYSQL order by排序與索引關係總結MySql排序索引
- MySQL distinct 和 order by 排序混淆的替代方案MySql排序
- C語言萌新上手:數列分段C語言
- MySQL按指定順序排序(order by field的使用)MySql排序
- MYSQL order by排序導致效率低小優化MySql排序優化
- MySQL 是如何實現資料的排序的?MySql排序
- 《MySQL 入門教程》第 10 篇 資料排序MySql排序
- mysql使用group by實現組內排序實戰MySql排序
- 通過MySQL儲存原理來分析排序和鎖MySql排序
- MySQL5.7被一條排序SQL弄當機MySql排序