2014-10-23 5 views
0

Логика:MySQL Query сортировать по DESC, когда совпадают 2 поля

1) Когда идентификатор & матч id1, я хочу, чтобы отсортировать DESC (например, идентификатор = 9 является наивысшая оценка = 400, ID = 1 является второй высокий балл. = 150)

2) ниже совпадающей строки Я хочу все ID1 о том, что такие же, как в матче отсортировано по номеру ASC (например. ID = 10 & ID1 = 9 будет непосредственно под идентификатором = 9 & ID1 = 9 строка)

** Примечание: идентификатор уникален и автоматически увеличивается

Исходные данные:

id id1 score 
1 1 150 
2 1 70 
3 3 80 
4 3 250 
5 3 800 
6 3 560 
7 7 100 
8 7 195 
9 9 400 
10 9 35 

Желаемый результат:

id id1 score 
9 9 400 
10 9 35 
1 1 150 
2 1 70 
7 7 100 
8 7 195 
3 3 80 
4 3 250 
5 3 800 
6 3 560 
+0

MySQL не дает возможность изменять * как * Вам сортируются из одной строки в другую. Он будет применять 'ORDER BY' (сортировка) ко всем строкам, возвращаемым запросом – mmcrae

+0

Кстати, это поможет, если вы назвали задействованные таблицы, то есть где' id' из vs 'id1'? и «оценка»? – mmcrae

+0

Это все в одном столе! – Bzyzz

ответ

1

Вот ваш запрос:

select 
    t1.id, 
    t1.id1, 
    t1.score 
from 
    myTable t1 
    left join myTable t2 on t1.id1 = t2.id and t2.id = t2.id1 
order by 
    t2.score desc, 
    t1.id=t1.id1 desc, 
    t1.id asc 

sql-fiddle

+0

Привет, вывод, который я включил, является правильным. Он отфильтровывается по счету, затем id – Bzyzz

+0

@Bzyzz Ах, я понимаю, теперь я думал, что вы хотите отфильтровать по счету desc, когда сопоставляете и оцениваете asc в других случаях. Я исправил его теперь, что вы хотите, изменив 'score' на' id' в последней строке. –

+0

Спасибо за вход! Твоя работа великолепна. Я также добился желаемого результата через два скрипта. FIRST ищет все строки с id = id1 и сортирует DESC. SECOND получает все строки, где id1 равно одному из FIRST-скрипта. Итак ... после того, как я получаю первую строку данных, я запускаю цикл while, чтобы заполнить второй скрипт – Bzyzz

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