1. 程式人生 > >對錶資料進行(置頂,上移,下移,置底操作)---資料庫sql

對錶資料進行(置頂,上移,下移,置底操作)---資料庫sql

這兩天一直在做社群論壇的帖子的(置頂,上移,下移,置底操作),下面是個人心得:



-- 上一條: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);