[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: ORDER BY - group by
mrmaloy
Добрый день.
Никак не могу сообразить как отсортировать

SELECT
c.*,
(
SELECT count(*) as cnt FROM ss_products c2 WHERE c2.model=c.model AND c2.vendor=c.vendor AND amount>0 AND available='1') as mcnt
FROM ss_products c WHERE (????) AND enabled='1'
ORDER BY mcnt DESC, model, mcnt=0, amount=0, available, dia LIMIT 0,20


Вот такой запрос отдает например


Модель | mcnt
B58 | 13
B70 | 12
B70 | 12
B70 | 12
B78 | 11
B58 | 0
B58 | 0
B58 | 0
B58 | 0


А нужно что бы отдавал


Модель | mcnt
B58 | 13
B58 | 0
B58 | 0
B58 | 0
B58 | 0
B70 | 12
B70 | 12
B70 | 12
B78 | 11


Т.е. сортировка по модели но не по алфавиту, а по mcnt.
Подскажите пожалуйста как это сделать.




Спустя 7 минут, 1 секунда (13.01.2012 - 11:54) Placido написал(а):
Просто поменяйте местами mcnt и model в части ORDER
...ORDER BY  model, mcnt DESC,...

Спустя 42 секунды (13.01.2012 - 11:55) Winston написал(а):
ORDER BY model, mctn DESC
?

PS: Опередили :D

Спустя 16 минут, 50 секунд (13.01.2012 - 12:12) mrmaloy написал(а):
ORDER BY model, mctn DESC

В таком случае будет сортировка по названию модели


Модель | mcnt
A22 | 0
A23 | 0
B58 | 13
B58 | 0
B58 | 0
B58 | 0
B58 | 0
B70 | 12
B70 | 12
B70 | 12
B78 | 11



а нужно что бы было


B58 | 13
B58 | 0
B58 | 0
B58 | 0
B58 | 0
B70 | 12
B70 | 12
B70 | 12
B78 | 11
A22 | 0
A23 | 0


т.е. первыми идут те модели в которых большее mcnt и они идут все вместе

Спустя 1 минута, 38 секунд (13.01.2012 - 12:14) Winston написал(а):
Цитата (mrmaloy @ 13.01.2012 - 11:12)
а нужно что бы было

Походу без извращений или доп. поля это невозможно сделать.

Спустя 55 минут, 42 секунды (13.01.2012 - 13:09) Placido написал(а):
Упрощенно. Если в таблице `yourtable` есть поля `model` и `mcnt`, то будет работать приведенный ниже запрос. Изменить его под вашу таблицу, думаю, будет несложно
SELECT 
`t1`.`model`, `t2`.`mcnt`
FROM
(SELECT
`model`, MAX(`mcnt`) `b1`
FROM
`yourtable`
GROUP BY `model`) `t1`
RIGHT JOIN
`yourtable` `t2` ON `t1`.`model` = `t2`.`model`
ORDER BY `t1`.`b1` DESC;

Спустя 7 минут, 18 секунд (13.01.2012 - 13:17) mrmaloy написал(а):
Placido
В таблице нет поля mcnt - это поле создается в запросе

Спустя 5 минут, 17 секунд (13.01.2012 - 13:22) Placido написал(а):
Я ж говорю - упрощенно. Вставьте вместо
...MAX(`mcnt`) `b1`...
вот это:
...MAX(SELECT count(*) as cnt FROM ss_products c2 WHERE c2.model=c.model AND c2.vendor=c.vendor AND amount>0 AND available='1') `b1`...


_____________
<td></td>...<td></td>...<td></td>... тихо стучали колеса поезда в ночной тишине.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.