對錶資料進行(置頂,上移,下移,置底操作)---資料庫sql
阿新 • • 發佈:2019-01-05
這兩天一直在做社群論壇的帖子的(置頂,上移,下移,置底操作),下面是個人心得:
-- 上一條:select * from 表 where 資料id<@當前顯示資料id order by 資料_id asc) limit 1 -- 下一條:select * from 表 where 資料id>@當前顯示資料id order by 資料_id desc) limit 1 -- 給新查詢出來的結果新增新的編號 SELECT @row := @row +1 AS ROW , bestTopic.id, bestTopic.cover, bestTopic.title, bestTopic.orders, bestTopic.topic_id, bestTopic.is_pub, bestTopic.create_date, bestTopic.modify_date from qbao_bbs_best_topic bestTopic, ( SELECT @row :=0 )r where 1=1 ORDER BY orders desc -- 最大編號 SELECT IFNULL(orders,0) from qbao_bbs_best_topic ORDER BY orders desc limit 1; -- 最小編號 SELECT orders from qbao_bbs_best_topic ORDER BY orders asc limit 1; -- 下一條 SELECT IFNULL(orders,0) from ( SELECT @row := @row +1 AS ROW , id, orders from qbao_bbs_best_topic, ( SELECT @row :=0 )r ORDER BY orders desc ) bestTopic where ROW<1 ORDER BY ROW DESC limit 1; -- 上一條 SELECT orders from ( SELECT @row := @row +1 AS ROW , id, orders from qbao_bbs_best_topic, ( SELECT @row :=0 )r ORDER BY orders desc ) bestTopic where ROW>1 ORDER BY ROW ASC limit 1; -- 資料前提 1)資料存在欄位(orders),每次新增,編號預設(最大值+1) 2)資料編號,會存在相同編號,以及負數編號 3)置頂,置底,操作針對所有記錄,(所有頁面,不是單個頁面) -- 操作需求 置頂,上一條,下一條,置底 -- 規則 1)置頂操作 ,被操作記錄 編號是置頂帖子(編號+1); 2)置底操作 ,被操作記錄 編號是置底帖子(編號-1); 3)上一條記錄,被操作記錄,與上一條記錄比較: 1.如果編號不同,互相調換位置; 2.如果編號相同,上一條操作記錄(編號-1); 4)下一條記錄,被操作記錄,與下一條記錄比較: 1.如果編號不同,互相調換位置; 2.如果編號相同,下一條操作記錄,(編號+1);