日常開發中經常需要對數據進行排序,通常可以講數據庫中的數據獲取到后通過程序在內存中進行排序,但是這樣排序需要將排序內容從數據庫中查詢到內容,同時使用程序算法進行排序,然后將排序結果更新入數據庫,這樣排序效率較低,開發量較大,本例采用數據庫本身自有屬性進行大數據的快速排序,具體方案如下:
1、刪除臨時表
DROP TABLE IF EXISTS SORT_TEMP
2、創建臨時表
1 CREATE TABLE SORT_TEMP ( 2 ID BIGINT(12) NOT NULL AUTO_INCREMENT, 3 SORT_ID BIGINT(12) NOT NULL COMMENT '被排序表ID', 4 PRIMARY KEY (ID) 5 ) ENGINE=INNODB AUTO_INCREMENT=0 DEFAULT CHARSET=UTF8 COMMENT='排序臨時表'
3、將需要按照的排序規則內容數據插入到臨時表中(按照分類表的狀態倒序,ordby字段不為空的按照正序排在最前面,為空的排在最后面,更新時間倒序,ID正序)
INSERT INTO SORT_TEMP(SORT_ID) SELECT c.id FROM t_catalog c ORDER BY c.state DESC, ISNULL(c.ordby), c.ordby, c.UPDATE_TIME DESC, c.id
4、將臨時表中的數據回填到被排序表的ordby字段中
UPDATE t_catalog c SET c.ordby = (SELECT id FROM SORT_TEMP t WHERE t.SORT_ID = c.id ), c.update_time = NOW()
5、刪除臨時表
DROP TABLE IF EXISTS SORT_TEMP