Можно ли в mysql сортировать по количеству записей?
Здравствуйте, скажите пожалуйста, можно ли на уровне запроса сортировать данные?
Запрос такого вида:
SELECT * FROM category LEFT JOIN product ON category.id = product.category_id WHERE category.id IN (1,2,3...)
В результате нужно получить вывод информации в виде "Категория1 -> продукт1, продукт2, продукт3..., Категория2 -> продукт1, продукт2...". Но категории должны сортироваться по количеству продуктов в них, то есть категория, в которой больше всего товаров - первая, в которой меньше всего - последняя
Да, это возможно.
Запрос должен получиться типа этого:
SELECT category.name, GROUP_CONCAT(product.name)
FROM category
LEFT JOIN product ON category.id = product.category_id
GROUP BY category.id
ORDER BY COUNT(product.id) DESC
Думаю что можно извратиться и запихать это в один запрос, но это абсолютно не правильно с точки зрения быстродействия.
Правильно - кешировать в категории количество товаров в отдельном поле.
Обновлять это поле когда изменяется категория у товара.
Запрос получается простой и легкий.
PS Не используёте звездочку когда у Вас идет запрос к нескольким таблицам, это потенциально источник кучи проблем.
SELECT * FROM category
LEFT JOIN (SELECT tt.category_id, COUNT(p.*) AS cnt FROM product AS p WHERE p.color = "red") AS tt ON tt.category_id = category.id
WHERE category.id IN (1,2,3...)
ORDER BY tt.cnt DESC