2015-12-19 2 views
4

Пример:Как заказать различные значения в MySQL?

---------------------------------------------- 
P.No  |  Relation | Name 
---------------------------------------------- 
2  |  Self  | Kumar 
---------------------------------------------- 
1  |  Husband | Selvam 
---------------------------------------------- 
2  |  Son  | Manoj 
---------------------------------------------- 
1  | Self  | Gandhi 
---------------------------------------------- 

Как можно более строк, основанные на колонке значения предпочтение?

Я хочу что-то вроде этого:

Order By P.No & 
(Self 1 st preference , 
    Husband 2nd preference, 
    son 3rd Preference) 

И я ожидаю этот вывод:

---------------------------------------------- 
P.No  |  Relation | Name 
---------------------------------------------- 
1  |  Self  | Gandhi 
---------------------------------------------- 
1  |  Husband | Selvam 
---------------------------------------------- 
2  |  Self  | Kumar 
---------------------------------------------- 
2  |  Son  | Manoj 
---------------------------------------------- 

Пожалуйста, помогите мне решить мою проблему. Спасибо.

+0

На самом деле P.No Order в порядке. Но мне нужно отдавать предпочтение второму порядку. –

ответ

4

Я думаю, что вы могли бы, вероятно, сделать что-то вроде:

order by p.`No`, `Relation`='Self', `Relation`='Husband', `Relation`='Son' 

Выражения Relation='Self', Relation='Husband', Relation='Son' возвратных 0 или 1 (в порядке добавляется), в зависимости, если удовлетворены или нет. Таким образом, может генерировать необходимое приказывать

Вы также можете использовать FIELD function of MySQL как:

order by p.`No` ASC, FIELD(`Relation`,'Self,Husband,Son') ASC 
+0

Очень спасибо @RamRaider –

+0

Добро пожаловать - и спасибо @Nikos M за добавление более подробной информации – RamRaider

5

Вы хотите перевести Тройная (Self, Husband, Son) в то, что compareable. Есть несколько способов сделать это:

Наивный способ:

ORDER BY IF(Relation="Self",0,IF(Relation="Husband",1,2)) 

Или фанк путь:

ORDER BY (Relation="Self")+2*(Relation="Husband")+3*(Relation="Son") 
2

Пожалуйста, попробуйте ниже запрос

select *,if(Relation = 'Self',1,if(Relation = 'Husband',2,if(Relation = 'Son',3,4))) as rel_ord from table order by p.No asc ,rel_ord asc 
0

Просто перечисляйте в порядке предпочтения.

ORDER BY P.No,Name,Relation ASC 
Смежные вопросы