按字段顺序+按字母顺序排序

时间:2012-11-20 15:08:51

标签: mysql sql sql-order-by

我想首先按字段排序我的查询,然后为那些不在'by FIELD'列表中的人排序,按字母顺序排序。当我这样做时,结果首先给出了不在字段列表中的所有字段,在这些字段之后,结果显示按字段排序的字段(正确)

这是我的疑问:

SELECT merk FROM user WHERE merk <> '' group by merk 
ORDER BY FIELD(merk,'Theo', 'Anne et Valentin') ASC, merk ASC

结果是这样的(参见最后2个是ORDER BY FIELD记录)

'Binoche'
'Binoche Mini'
'Blac'
'Carrera'
'Christian Dior'
'D&G'
'Staffan Preutz Design'
'Tim Van Steenbergen'
'Tom Ford'
'Tom Tailor'
'Tommy Hilfiger'
'Vogue'
'Vuillet Vega'
'You\'s Eyeworks'
'Theo'
'Anne et Valentin'

2 个答案:

答案 0 :(得分:2)

这是因为FIELD(merk,'Theo', 'Anne et Valentin')在值不在列表中时返回zero,因此不是FIELD(merk,'Theo', 'Anne et Valentin') ASC,而是通过降序排序,以便{{1}列表中出现的值1}}将首先排序。

FIELD

<强>来源

答案 1 :(得分:-1)

您也可以这样做,因此您无需更改自定义字段的排序顺序:http://www.sqlfiddle.com/#!2/c9122/1

SELECT merk , FIELD(merk,'Theo', 'Anne et Valentin') 
FROM user 
WHERE merk <> '' group by merk 
ORDER BY 
    COALESCE(
      NULLIF(FIELD(merk,'Theo', 'Anne et Valentin'), 0)
      , 99999)      
    ASC

输出:

|                  MERK | FIELD(MERK,'THEO', 'ANNE ET VALENTIN') |
------------------------------------------------------------------
|                  Theo |                                      1 |
|      Anne et Valentin |                                      2 |
|            Tom Tailor |                                      0 |
| Staffan Preutz Design |                                      0 |
|               Carrera |                                      0 |
|               Binoche |                                      0 |
|       You''s Eyeworks |                                      0 |
|        Tommy Hilfiger |                                      0 |
|   Tim Van Steenbergen |                                      0 |
|        Christian Dior |                                      0 |
|          Binoche Mini |                                      0 |
|                 Vogue |                                      0 |
|              Tom Ford |                                      0 |
|                   D&G |                                      0 |
|                  Blac |                                      0 |
|          Vuillet Vega |                                      0 |