想請問假如有個資料表project
用php,排序會變以下情況,就是無法照第一名、第二名、第三名排序,但特優、優等、佳作的排序是正確的,想請問要怎麼解決呢? 謝謝
$sql="SELECT * FROM enproject where tag='1' order by det,award DESC";
目前想到把將資料庫的第一名、第二名、第三名,改成特優、優等、佳作,然後再寫php if else replace替換成第一名、第二名、第三名,這樣應該可以正常排序..
MSSQL :
select *
FROM project
where 1=1
order by det,
(CASE when (det='A' or det='B') and award='特優' then 1
when (det='A' or det='B') and award='優等' then 2
when (det='A' or det='B') and award='佳作' then 3
when det='C' and award='第一名' then 1
when det='C' and award='第二名' then 2
when det='C' and award='第三名' then 3 end)
用SQL的case when then else end解決~
在order by下case when then else end 判斷就可以解決排序~
select *
from enproject
where tag='1'
order by dat
,(
case
when award = '特優' then 0
when award = '優等' then 1
when award = '佳作' then 2
when award = '第一名' then 3
when award = '第二名' then 4
when award = '第三名' then 5
else 100
end
)
文字的排序方式本來就不是按照我們的習慣,
一種方法是另外建一個表來放第一名、第二名等詞,
然後有一個數字排序的欄位,
把你要的排序順序放進去,
真正排序是用這個數字欄位去排.
分享一下我的寫法
SELECT * FROM enproject WHERE tag=1
ORDER BY det, award='第一名', award='第二名', award='第三名', award='特優', award='優等', award='佳作'
推薦數據庫使用tinyint類型存儲,使用文字會增加數據庫的工作量,並且數據量大時文字索引也比較麻煩
or
你可以存儲為ENUM,但是這是一個危險的格式