ФорумРазработкаБазы данных → сортировка по подчиненной таблице и group by

сортировка по подчиненной таблице и group by

  • sanich

    Сообщения: 20 Репутация: N Группа: Кто попало

    Spritz 26 января 2010 г. 13:02

    Есть таблица trening и trening_files отношение между ними 1 ко многим
    в таблице trening_files есть поле checked по которому нужно отсортировать
    Вот что пробовал:
    Код

    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Код

    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

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 26 января 2010 г. 13:04, спустя 2 минуты 6 секунд

    LEFT JOIN
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 26 января 2010 г. 13:06, спустя 1 минуту 48 секунд

    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
    так попробуй
    Спустя 78 сек.

    LEFT JOIN
    у него проблема в том, что order применяется позднее чем group by. стандартная проблема :)

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

    Сообщения: 1370 Репутация: N Группа: Джедаи

    Spritz 27 января 2010 г. 22:53, спустя 1 день 9 часов 47 минут

    гон, а как же distinct?
    Спустя 44 сек.
    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

Пожалуйста, авторизуйтесь, чтобы написать комментарий!