iT邦幫忙

1

php sql 中文字排序

php

想請問假如有個資料表project
https://ithelp.ithome.com.tw/upload/images/20181202/20097057L4oPuh8aR1.jpg
用php,排序會變以下情況,就是無法照第一名、第二名、第三名排序,但特優、優等、佳作的排序是正確的,想請問要怎麼解決呢? 謝謝

$sql="SELECT * FROM enproject where tag='1' order by det,award DESC";

https://ithelp.ithome.com.tw/upload/images/20181202/20097057PFyKrA4fHY.jpg

目前想到把將資料庫的第一名、第二名、第三名,改成特優、優等、佳作,然後再寫php if else replace替換成第一名、第二名、第三名,這樣應該可以正常排序..

2
rogeryao
iT邦研究生 5 級 ‧ 2018-12-03 09:53:30
最佳解答

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)
mayyola iT邦新手 3 級 ‧ 2018-12-03 11:20:35 檢舉

謝謝r大

3
純真的人
iT邦高手 3 級 ‧ 2018-12-03 00:29:03

用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
)

測試參考

mayyola iT邦新手 3 級 ‧ 2018-12-03 11:21:09 檢舉

感謝純真大

0
小魚
iT邦高手 1 級 ‧ 2018-12-03 08:02:29

文字的排序方式本來就不是按照我們的習慣,
一種方法是另外建一個表來放第一名、第二名等詞,
然後有一個數字排序的欄位,
把你要的排序順序放進去,
真正排序是用這個數字欄位去排.

mayyola iT邦新手 3 級 ‧ 2018-12-03 11:21:19 檢舉

謝謝小魚

0
犬千賀
iT邦新手 5 級 ‧ 2018-12-04 10:33:17

分享一下我的寫法

SELECT * FROM enproject WHERE tag=1
ORDER BY det, award='第一名', award='第二名', award='第三名', award='特優', award='優等', award='佳作'
0
auv
iT邦新手 5 級 ‧ 2018-12-10 16:22:23

推薦數據庫使用tinyint類型存儲,使用文字會增加數據庫的工作量,並且數據量大時文字索引也比較麻煩
or
你可以存儲為ENUM,但是這是一個危險的格式

我要發表回答

立即登入回答