2012-03-27 2 views
1

Ниже представлен мой запрос Мне нужно заказать с этими тремя столбцами. Это для комплексного поиска. Если я использовал один из них, он отлично работает. Но, управляя более чем одним, он не упорядочивает должным образом.Заказ более чем на один столбец с mysql

EDIT

На самом деле мне нужно, премиум записи должны быть на первых позициях наряду с большим количеством избранных, а также элитные клиенты имеют более высокий приоритет. Это все работает условно

1) Больше избранное придет на первый

2), но премия будет считаться

3) Если основной будет иметь 5 фаворитов, это обыкновение толкать вверх, основной имеющий небольшой приоритет

4) Как хорошо элита есть хороший приоритет

SELECT 
    `Driver`.`id` , 
    `Driver`.`login_id` , 
    `Login`.`profile_type`, 
    ................. 
ORDER BY `fav_count`, 
    FIELD( `Login`.`profile_type` , "premium", "basic") , 
    `Driver`.`is_elite` ASC 

Sample г esult я ожидал

is_elite|  profile_type | fav_count 
________|_____________________|____________ 
1  |  premium  | 4  
1  |  premium  | 3 
1  |  premium  | 2 
1  |  premium  | 1 
0  |  basic  | 5 
0  |  basic  | 0 

Пожалуйста, сообщите мне. Благодаря

+1

Пожалуйста, сделайте свой вопрос более читаемым. – Starx

+0

В чем проблема? – safarov

+0

и где редактирование? =) –

ответ

3

Если вы хотите вывод вы в список, вы должны изменить порядок значений в ORDER BY:

ORDER BY `Driver`.`is_elite` DESC, FIELD( `Login`.`profile_type` , "premium", "basic") DESC, `fav_count` DESC 

Примечания: Вы также должны быть убывающими (DESC) на все ваши сортировку столбцов , Каждый из них сортируется по самому крупному.

+0

Кстати, я предполагаю, что «is_elite» имеет более высокий приоритет, чем «profile_type», sort-wise. Если это неверно, поместите «profile_type» сначала в список ORDER BY и «is_elite» второй. – JerseyMike

+0

Все 3 связаны Я отредактировал свой вопрос –

+0

@duke, вот как построить ORDER BY ... # 1: Выберите поле, которое является самым важным (сортировка) и добавьте его в список. # 2: Если его сначала нужно отсортировать с наибольшими значениями, добавьте «DESC». # 3: Вернитесь к # 1, пока не находитесь в столбцах сортировки. Если вы будете следовать этим правилам, вы должны получить то, что хотите. – JerseyMike

1

Сделать заказ что-то вроде этого:

ORDER BY `table`.`is_elite`, `table`.`profile_type`, `table`.`fav_count` DESC 

Это заказ таким образом, что вы ожидаете (насколько я могу видеть из кода вы дали).

0

Из результата образца вы ожидали, похоже, вы хотите использовать:

ORDER BY FIELD( `Login`.`profile_type` , "premium", "basic"), `fav_count` DESC, `Driver`.`is_elite` ASC 

Но это спекулятивный в лучшем случае, ваш вопрос не был сформулирован очень хорошо.

3

неуверенный в своем вопросе, но это дает порядок, который вы показываете в примере.

order by profile_type desc, fav_count desc 
Смежные вопросы