За последние 24 часа нас посетили 56436 программистов и 1694 робота. Сейчас ищут 980 программистов ...

Ребят, помогите с запросом :)

Тема в разделе "MySQL", создана пользователем unmanner, 9 сен 2011.

  1. unmanner

    unmanner Активный пользователь

    С нами с:
    23 янв 2011
    Сообщения:
    105
    Симпатии:
    0
    Есть две таблицы: `sub_cat` и `file`

    Нужно выделить всё из таблицы `sub_cat` и отсортировать по количеству строк содержащих одинаковые "sub_cat_id" из таблицы `file`

    Делаю так:

    [sql]SELECT * FROM `sub_cat`, `file` WHERE sub_cat.id = file.sub_cat_id GROUP BY sub_cat.id ORDER BY COUNT(file.id)[/sql]

    Но ничего не получается, возможно проблема в 2-х литрах пива :) Взгляните трезвым взглядом, пожалуйста :)
     
  2. adviser

    adviser Активный пользователь

    С нами с:
    10 сен 2011
    Сообщения:
    2
    Симпатии:
    0
    Не совсем точно понятно что хотелось получить... Но может это поможет?
    [sql]SELECT `s`.*, COUNT(`f`.`sub_cat_id`) AS `cnt` FROM `sub_cat` `s` LEFT JOIN `file` `f` USING(`sub_cat_id`) WHERE `s`.`sub_cat_id`=`f`.`sub_cat_id` GROUP BY `cnt`[/sql]
    --
    Взгляд тоже не совсем трезвый :) (1л)
     
  3. unmanner

    unmanner Активный пользователь

    С нами с:
    23 янв 2011
    Сообщения:
    105
    Симпатии:
    0
    Ошибка - #1054 - Unknown column 'sub_cat_id' in 'from clause'

    А что значит `s` и `f`?
     
  4. adviser

    adviser Активный пользователь

    С нами с:
    10 сен 2011
    Сообщения:
    2
    Симпатии:
    0
    sub_cat_id промазал :) `s`.`id`
    s и f псевдонимы таблиц
     
  5. unmanner

    unmanner Активный пользователь

    С нами с:
    23 янв 2011
    Сообщения:
    105
    Симпатии:
    0
    Не получается, пишу так :(


    [sql] SELECT `s`.*, COUNT(`f`.`sub_cat_id`) AS `cnt` FROM `sub_cat` `s` LEFT JOIN `file` `f` USING(`sub_cat_id`) WHERE `s`.`id`=`f`.`sub_cat_id` GROUP BY `cnt`[/sql]
     
  6. unmanner

    unmanner Активный пользователь

    С нами с:
    23 янв 2011
    Сообщения:
    105
    Симпатии:
    0
    #1054 - Unknown column 'sub_cat_id' in 'from clause'
     
  7. unmanner

    unmanner Активный пользователь

    С нами с:
    23 янв 2011
    Сообщения:
    105
    Симпатии:
    0
    Ребят, помогите -- сайт встал "(
     
  8. Chushkin

    Chushkin Активный пользователь

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    adviser Вам же дал решение, уж откорректировать для себя и сами могли бы ;)
    Что-то вроде:
    select sub_cat.*, COUNT(file.id) as items
    from sub_cat
    left join file on file.sub_cat_id = sub_cat.id
    group by sub_cat.id
    order by items asc, sub_cat.id asc
    п.с.
    Не используйте USING(), если плохо понимаете что к чему.
     
  9. unmanner

    unmanner Активный пользователь

    С нами с:
    23 янв 2011
    Сообщения:
    105
    Симпатии:
    0
    items Нулевой получается (
     
  10. Chushkin

    Chushkin Активный пользователь

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Всё работает. Ищите глюки в чём-то другом.
     
  11. unmanner

    unmanner Активный пользователь

    С нами с:
    23 янв 2011
    Сообщения:
    105
    Симпатии:
    0
    Да честно, не обманываю. Сортирует по id и таблицы sub_cat и всё..

    [​IMG]
     
  12. Chushkin

    Chushkin Активный пользователь

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Упорядочивается по обоим полям, как и положено.
    Только вот у Вас поле Items = 0, что означает, что в таблице `file` _нет ни одной записи_ удовлетворяющей условию "file.sub_cat_id = sub_cat.id" для первых 30 записей .
    Так что не морочьте голову ни себе ни нам ;)
     
  13. unmanner

    unmanner Активный пользователь

    С нами с:
    23 янв 2011
    Сообщения:
    105
    Симпатии:
    0
    О, спасибо, заработало вот так:

    [sql]SELECT sub_cat . * , COUNT( file.id ) AS items
    FROM sub_cat
    LEFT JOIN FILE ON file.sub_cat_id = sub_cat.id
    GROUP BY sub_cat.id
    ORDER BY items DESC
    LIMIT 0 , 30[/sql]
     
  14. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    не прошло и года.