MySQL中的查詢小技巧

2021-09-28 07:24:46 字數 3422 閱讀 9867

乙個簡單的示例表,user_id為使用者id外來鍵,score為使用者分數。

使用者分數查詢系統中,首頁列表按照分數降序排列,即原本應是如下順序:

出於人性化考慮,當使用者進入系統時,我們希望該使用者的所有得分都在最前面顯示,且不影響其他記錄的排序。這時可以用case when來自定義排序的優先順序。

寫法①:簡單case語句

-- when語句中的值為判斷條件,then語句中的值為優先順序(越大優先順序越高)

select

*from demo order

bycase user_id when

2then

10end

desc

, score desc

;

寫法②:可搜尋case語句

-- 相等判斷

select

*from demo order

bycase

when user_id =

2then

10end

desc

, score desc

;-- 範圍判斷

select

*from demo order

bycase

when

(user_id >

1and user_id <3)

then

10end

desc

, score desc

;-- 相似判斷

select

*from demo order

bycase

when user_id like

"%2%"

then

10end

desc

, score desc

;-- 包含判斷

select

*from demo order

bycase

when user_id in(2

)then

10end

desc

, score desc

;-- 正則判斷

select

*from demo order

bycase

when user_id regexp

'[2]'

then

10end

desc

, score desc

;

以上語句查詢結果均為下圖:

實際上,case還有很多妙用,用在select作用域、用在where作用域、用在order作用域,都是可以大展身手的好地方。

-- 新增查詢結果標記位,

select id, user_id, score,

case

when score >

90then

'優秀'

when score >

80then

'合格'

else

'不合格'

-- 千人千面的判斷,使用者為vip時,只要80就算優秀

select id, user_id, score,

'優秀'

開發中或多或少會有這樣的需求,使用者定義了排序的方式,而且並不一定在邏輯上有序。以本部落格為例,我們需要按user_id 2 →\rightarrow

→ 3 →

\rightarrow

→ 1的順序排列,且不影響分數倒序的基礎,此時可以使用field來自定義排序方式。

-- 單列的自定義排序

select

*from demo order

by field(user_id,2,

3,1)

asc, score desc

;-- 多列的自定義排序

注意:實際上,field(str, str1, str2, str3) 返回str在比較列表中的排位,不在則返回0

if函式也能定義一些方便的查詢,此處不做贅述。

select id, user_id, score,

if(score >90,

'優秀'

,'其他')as

mysql查詢優化小技巧

1.開啟快取mysql show variables like query cache mysql set global query cache type 1 mysql set global query cache size 1024 1024 32注意 查詢快取存在判斷是嚴格依據select語句...

mysql中的小技巧

在長期的資料更新過程中,索引檔案和資料檔案,都將產生空洞,形成碎片 我們可以通過乙個 nop操作 不產生對資料實質影響的操作 來修改表。比如 表的引擎為 innodb,可以 alter table tablename engine innodb 也可以 optimize table tablenam...

mysql 查詢技巧

查出來的結果每一行顯示一條,中間以 號分隔。select from tablename limit 10 g mysql 隨機取資料 select from table name order by rand limit 5 二 mysql複製表資料到新錶的方法 1.mysql複製表結構及資料到新錶 ...