Есть две таблицы: `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-х литрах пива Взгляните трезвым взглядом, пожалуйста
Не совсем точно понятно что хотелось получить... Но может это поможет? [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л)
Не получается, пишу так [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]
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(), если плохо понимаете что к чему.
Упорядочивается по обоим полям, как и положено. Только вот у Вас поле Items = 0, что означает, что в таблице `file` _нет ни одной записи_ удовлетворяющей условию "file.sub_cat_id = sub_cat.id" для первых 30 записей . Так что не морочьте голову ни себе ни нам
О, спасибо, заработало вот так: [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]