我想首先按字段排序我的查询,然后为那些不在'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'
答案 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 |