Есть такой запрос: Код (Text): mysql_query("SELECT id, FROM `mes` WHERE number='$ID' GROUP BY code ORDER BY viewed,id DESC"); В таблице содержаться много строк с одинаковым значением code, и их группирую GROUP BY code. Как сделать сортировку сначала по viewed(0 либо 1 в таблице), а потом по id DESC(от большого числа к меньшему). Из-за GROUP BY не правильно сортирует.
iliavlad Из-за GROUP BY не правильно сортирует id -- code - viewed - number 1 -- asd --- 1 -------- 2 2 -- sss --- 1 -------- 1 3 -- asd --- 1 -------- 2 4 -- sss --- 1 -------- 1 5 -- sss --- 1 -------- 1 6 -- asd --- 0 -------- 2 Выводит первым группу number 1(5 -- sss --- 1 -------- 1), а должно выводить группу number 2 (6 -- asd --- 0 -------- 2) id -- code - viewed - number 1 -- asd --- 1 -------- 2 2 -- sss --- 1 -------- 1 3 -- asd --- 1 -------- 2 4 -- sss --- 0 -------- 1 При таком раскладе выведет первым группу number 1 (4 -- sss --- 0 -------- 1) как и должно.
iliavlad Упрощал запрос, сделал ошибку. Сортировка по id нужна когда будет много number'ов и много строк, viewed могут быть все со значением 1. Код (Text): mysql_query("SELECT id, FROM `mes` WHERE number in (1,2) GROUP BY code ORDER BY viewed,id DESC"); id -- code - viewed - number 1 -- asd --- 1 -------- 2 2 -- sss --- 1 -------- 1 3 -- asd --- 1 -------- 2 4 -- sss --- 1 -------- 1 5 -- sss --- 1 -------- 1 6 -- asd --- 0 -------- 2 Должен вывести первым number 2 а потом number 1 но получается наоборот...
allowance посмотри в мануале, может надо явно указать, что для одного поля сортировка должна быть ASC, а для другого DESC.
Да гребаный карась! Когда используется GROUP BY, то мы работаем уже с группами, а не с отдельными записями. При GROUP BY code у групп нету id, у них нету viewed. Всем срочно тренироваться в MSSQL!
Volt(220) Так значит. Есть таблица сообщений, нужно вывести сгруппированные сообщения по number отсортировав сначала по viewed(0 либо 1 в таблице), а потом по id DESC(от большого числа к меньшему). Т.е. если везде viewed=1 то группа сообщений которая имеет запись с наибольшим id выводится первой. Если у какой-то группы viewed = 0, то выводить сначала группу сообщений где есть запись с viewed = 0. Если у многих групп сообщений viewed = 0, то выводить первую ту группу которая имеет запись с наибольшим id. Это теория
Значит так. 1)У группы нет viewed. Вы хотите отсортировать группы по убыванию суммы viewed всех записей группы? 2)У группы нет id. Как по нему сортировать?
Volt(220) Ну может есть какая-нибудь альтернатива решения задачи? В два запроса, например... Или замены GROUP BY на что-то другое... Цель - отсортировать сгруппированное, не цепляйтесь сразу за возможности GROUP BY.
Начните с [sql]SELECT * FROM `mes` WHERE number='$ID' ORDER BY code[/sql] Посмотрите что вы в итоге хотите получить. Если очень надо, можно будет затем приджойнить нечто вроде: [sql](select sum(viewed) as mySum, code from mes group by code) as t on t.code=mes.code[/sql] и сортировать по code и по mySum. Короче, начните с примера. Возьмите 30 строк разных данных и упорядочите их так как надо. А затем думайте над запросом, который воспроизводит такой порядок.