Этот сайт не наркоманов. Это сайт программистов.

Добро пожаловать на Пыху!

Логин:
Пароль:
 

Нет прописки? Зарегистрируйся!

Новости

Мы в твиттере!
Мы вконтакте!
Мы на яндексе!

Краснодарское время: 09 Февраль, 2012, 08:51:08

Страниц: [1]
Печать
Автор Тема: сортировка по подчиненной таблице и group by  (Прочитано 506 раз)
0 Пользователей и 1 Гость смотрят эту тему.
sanich    ↓ 
26 Январь, 2010, 01:02:06
НЕ ХУЕТА! ХУЕТА!

Карма: -2
Сообщений: 21
Сила слова: -9.52

Есть таблица trening и trening_files отношение между ними 1 ко многим
в таблице trening_files есть поле checked по которому нужно отсортировать
Вот что пробовал:
Код
 
SQL
SELECT t.id_trening,f.checked FROM trening t, trening_files f
WHERE t.id_trening = f.id_trening
ORDER BY f.checked DESC
 

 
id_trening  checked
4    no
2    no
2    no
3    no
1    yes
4    yes
3    yes
2    yes
1    yes
5    yes
 
В результате в поле id_trening есть дублирующие записи, дубликаты нужно убрать, сотрировка верно работает, из скрина видно, что если подавить дубликаты id_trening, то в поле id_trening числа должны стоять имеенно в такой последовательности и это то, что мне нужно
 
id_trening
4                
2
3
1
5
 
Убираю дубликаты с помощью group byКод
 
SQL
SELECT t.id_trening,f.checked FROM trening t, trening_files f
WHERE t.id_trening = f.id_trening
GROUP BY t.id_trening ORDER BY f.checked DESC

 

Получаю результат не в той последовательности, что есть неправильно
 
id_trening  checked
2    no
3    yes
4    yes
5    yes
1    yes
Записан
adw0rd    ↓ 
26 Январь, 2010, 01:04:12 , спустя 2 минуты 6 секунд
НЕ ХУЕТА! ХУЕТА!

эдво
Группа: Джедаи

Карма: не нужна
Сообщений: 17221
Сила слова: 1.65

LEFT JOIN
Записан

FreeBSD, Python, Django, Git, Emacs, Nginx, MySQL, SphinxSearch
Кинсбург * Либург * Футбург * Мой блог
phpdude    ↓ 
26 Январь, 2010, 01:06:00 , спустя 1 минуту 48 секунд
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 339
Сообщений: 19712
Сила слова: 1.72

SELECT t.id_trening,max(f.checked) FROM trening t, trening_files f
WHERE t.id_trening = f.id_trening
GROUP BY t.id_trening
так попробуй
Спустя 1 минуту 18 секунд добавил

LEFT JOIN
у него проблема в том, что order применяется позднее чем group by. стандартная проблема :)
 
решение либо использовать групповые функции max/min/avg/sum/count/прочие, либо join(select * FROM lalala order by `field`) `t`. чтобы в груп бай уже сортированные данные приходили
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
sanich    ↓ 
26 Январь, 2010, 11:24:20 , спустя 10 часов 18 минут 20 секунд
НЕ ХУЕТА! ХУЕТА!

Карма: -2
Сообщений: 21
Сила слова: -9.52

всем спасибо, вопрос закрыт, для тех кому интересно
 
нужно было:
SQL
SELECT t. * , r.rubrika,s.fname,s.name,s.email,s.STATUS,sum('no' = f.checked) AS checked_
FROM trening t, trening_files f, rubrika r, seller s
WHERE t.id_trening = f.id_trening AND t.id_rubrika = r.id_rubrika AND s.id_seller = t.id_seller
GROUP BY id_trening ORDER BY checked_ DESC
Записан
krasun    ↓ 
27 Январь, 2010, 10:53:22 , спустя 23 часа 29 минут 2 секунды
НЕ ХУЕТА! ХУЕТА!

Группа: Джедаи
Группа: Джедаи

Карма: 41
Сообщений: 1378
Сила слова: 2.98

гон, а как же distinct?
Спустя 44 секунды добавил
SQL
SELECT DISTINCT t.id_trening,f.checked FROM trening t, trening_files f
WHERE t.id_trening = f.id_trening
ORDER BY f.checked DESC
Записан
Страниц: [1]
Печать
 

Перейти в: