2015-07-30 5 views
1

У меня есть запрос MySQL, который возвращает результаты следующим образом:заказа MySQL по конкретным строкам только

id | count | type 
------------------ 
1 | 1000 | 1 
2 | 100 | 2 
3 | 80 | 2 

Я хотел бы заказать результаты только по строкам, где type является 2. Порядок других строк не имеет значения, хотя контроль над их порядком может быть полезен по линии. Таким образом, полученный заказ будет id = 2, затем id = 3, затем id = 1. Возможно ли это без постобработки?

+0

Так вы * хотите *, чтобы включить эти строки в результате, но вы хотите * заказать их после * любых строк с '2'? «Исключение из рода» не имеет смысла; вы сортируете весь набор, каждая строка должна иметь некоторую позицию внутри этого набора. – deceze

+0

Да, я хочу, чтобы в результате был добавлен любой 'type', но порядок где' type' равен 2 – dojogeorge

+0

Вам нужно просто добавить 'ORDER BY type DESC' к вашему запросу, если для типа больше значений, чем 1 & 2, вы получите наибольшее количество заказов сначала. Можете ли вы опубликовать свой запрос, чтобы мы могли видеть, что вам уже нравится? – llanato

ответ

5

Если вы хотите заказать строки с типом 2первый и все остальное после:

SELECT ... ORDER BY IF(type = 2, 0, 1) ASC 
0

Если вы хотите заказать колонкой, это:

SELECT * FROM table ORDER BY type ASC; 

Если вы хотите выбрать только те строки, которые type = 2, то это:

SELECT * FROM table WHERE type = '2' 
+0

Я хочу заказать столбец 'type', но где' type' = 2, в то же время возвращая другие результаты. – dojogeorge

0

Я думаю, что это SQL полезно вы

select * from table where type=2 
union 
select * from table 

спасибо.

0

Вы можете использовать field:

SELECT * FROM TableName ORDER BY field(type,2,1) 

Результат:

id count type 
---------------- 
2 100  2 
3 80  2 
1 1000 1 

Смотрите демо в SQL Fiddle

NB: Вы можете использовать столько параметров, сколько вы хотите.

Ex: field(type,2,1,6,3,5,4)

Он прикажет результат в порядке, указанном в field()

Если вы не хотите, чтобы выбрать все значения, вы можете использовать desc в конце, указав параметры обратного ,

например:

SELECT * FROM TableName ORDER BY field(type,3,2,5) desc 

Fiddle demo

+0

За исключением того, что вам придется перечислить все возможные типы таким образом ... Вы могли бы переформулировать его, чтобы использовать «FIELD', возвращающий« 0 »для незарегистрированных значений. – deceze

+1

@deceze: Обновлен мой ответ с 'desc' в конце, так что нам не нужно указывать все значения. Смотрите это [** скрипка **] (http://www.sqlfiddle.com/#!9/a0849/5). Спасибо, в любом случае! –

Смежные вопросы