在對資料庫的資料在前端進行展示列表的時候,經常有這麼乙個需求,就是將已經排序的列表進行調整順序,比如
現在想把id為8
的資料, 向下移一位,也就是和id為11
的sort
字段進行對調
第一種方式
這個一般來說是把兩條資料都查出來,
user1.
setsort
(user2.getsort)
; user2.
setsort
(user1.getsort)
; update
(user1)
;update
(user2)
;
這樣查兩次資料庫, 再更改兩次資料庫的操作並不是最好的選擇.
如果要在一條sql語句裡面寫,一樣很麻煩
第二種方式
update tbl_core_member c
set c.sort=
(case
when id=
8then
(select a.sort from
(select cc.
*from tbl_core_member cc) a where a.id=11)
when id=
11then
(select a.sort from
(select tmp.
*from question tmp) a where a.id=8)
end)
where c.id=
11or c.id=
8;
因為mysql不支援一邊查詢一邊update,所以還需要包裝成乙個a的假錶,而且用到case when
, 也顯得十分臃腫
第三種方式
update
tbl_core_member c
join
tbl_core_member cc
on(c.id =
8and cc.id =11)
or(c.id =
11and cc.id =8)
set c.sort = cc.sort , cc.sort = c.sort
這種就是同乙個錶用內連線拼接,把第二個表的sort給第乙個表,第乙個表的sort給第二個表,也避免了重新包裝一層select…from 假錶 的步驟 MySQL 兩條記錄合併查詢成一條顯示
資料庫資料如下 張三,屬於a部門也屬於b部門,在表裡存的是兩條記錄,但是在頁面上我想要根據人來顯示,在一條記錄裡顯示張三屬於a部門和b部門,張三隻顯一條記錄,不顯示兩條。select t.id,t.code,t.name,max case t.type when a then t.dept name...
Mysql 計算相鄰兩條記錄的時間差
比如排序之後我們想計算兩條相鄰記錄的時間差,因為mysql沒有視窗函式所以要麼模擬視窗函式要麼使用表自關聯,現有如下表資料 單獨只有這些資訊使用自關聯沒有約束條件,這時候我們可以使用增加乙個序號的字段,然後使用序號條件關聯 表一 select a.i i 1 as ord num from t pu...
Oracle取兩條記錄的交集INTERSECT
摘自 intersect 操作符用來合併兩個查詢,返回兩個查詢中都存在的記錄,即返回兩個查詢結果的交集,前提是兩個查詢的列的數量和資料型別必須完全相同。select code from employee where gender m intersect select code from salary...