簡體   English   中英

MySQL ORDER BY'ENUM'類型值

[英]MySQL ORDER BY 'ENUM' type value

我有一張桌子:

ID    TYPE     VALUE
1     phone    12345
2     fax      98753
3     address  etc
...

TYPE col被定義為ENUM ,其值包括: 'phone','fax','address'

現在我的查詢是:

$q = mysql_query(SELECT * FROM tbl ORDER BY id);
while(row = mysql_fetch_array($q)){
    echo $row['type'] . "--->" . $row['value'];
}

輸出按ID排序,第一行是phone ,然后是fax ,然后是address

但是我希望輸出按以下順序排序:

1-所有address 2-所有Phone 3-所有fax

我該如何實現?

謝謝你的幫助 :-)

SELECT A.*,  
case ID 
  when 3 then 1 
  when 2 then 3 
  when 1 then 2 
  else 4 end as myorder
FROM tbl A 
ORDER BY myOrder

或者,更新枚舉以首先在類型字段(例如01.Address, 02.Phone, 03.Fax ..)上列出編號01.Address, 02.Phone, 03.Fax然后按類型而不是ID進行訂購。 第二種方法可以很容易地添加多達99種類型,而無需更改代碼(僅數據),如果稍后使用第一種方法添加另一種類型,則必須編輯SQL ...

第一種方法使用case語句在運行時生成計算列。 該新列包含正確的訂單,方法是將ID替換為所需的訂單(它不會更改ID,它只是按照所需的順序定義它們),然后按此新計算所得的列進行訂購。

$q = mysql_query(SELECT A.*,  case ID when 3 then 1 when 2 then 3 when 1 then 2 else 4 end as myorder FROM tbl A ORDER BY myOrder);

第二種方法涉及更改枚舉中的數據,以使它前面帶有定義所需排序的數字。 因此,如果將排序中的SQL更改為按類型而不是ID進行排序,則它將起作用。

$q = mysql_query(SELECT * FROM tbl ORDER BY Type);

試試這個查詢-

SELECT * FROM tbl
ORDER BY
  CASE type
    WHEN 'address' THEN 1
    WHEN 'phone' THEN 2
    WHEN 'fax' THEN 3
    ELSE 4
  END

完整示例:

CREATE TABLE tbl (
  id int(11) DEFAULT NULL,
  type enum ('phone', 'fax', 'address') DEFAULT NULL,
  value int(11) DEFAULT NULL
);

INSERT INTO test.tbl(id, type, value) VALUES
  (1, 'phone', 11),
  (2, 'fax', 22),
  (3, 'address', 33),
  (4, 'fax', 44),
  (5, 'address', 55);

SELECT * FROM tbl
ORDER BY
  CASE type
    WHEN 'address' THEN 1
    WHEN 'phone' THEN 2
    WHEN 'fax' THEN 3
    ELSE 4
  END;

+------+---------+-------+
| id   | type    | value |
+------+---------+-------+
|    3 | address |    33 |
|    5 | address |    55 |
|    1 | phone   |    11 |
|    2 | fax     |    22 |
|    4 | fax     |    44 |
+------+---------+-------+

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM