@maksam07

Как посчитать количество строк по категориям?

Добрый день. Делаю "магазин", есть товары, рассортированы по категориям, типа:
Таблица товаров:
CREATE TABLE goods ( 
	id INT UNSIGNED NOT NULL AUTO_INCREMENT,
	_data JSON NOT NULL,
	_cat INT UNSIGNED NOT NULL,
	PRIMARY KEY (id)
) DEFAULT CHARSET=utf8;

Таким запросом я получаю все категории товаров и их количество (библиотека safemysql):
$cats = $db->getAll('
	SELECT _cat, COUNT(*) as _cnt
	FROM goods 
	GROUP BY _cat
');

В цикле _cat сверяю в массивом категорий прописанным в php и вывожу дополнительную информацию. Я знаю что это далеко не правильный метод работы с категориями, поэтому продолжу.

Есть же второй вариант, который должен быть значительно лучше. Это создать таблицу категорий и столбцу _cat присваивать идентификатор категории из другой таблицы, а потом выводить примерно так:
$cats = $db->getAll('
	SELECT COUNT( g.id ) as _cnt, c.* 
	FROM cats c 
	LEFT JOIN goods g 
	ON g._cat = c.id
	GROUP BY g._cat
');

Пока что не тестировал второй запрос, написал на глаз. На счет GROUP BY не уверен, но вроде нужен.
Так вот, есть второй вариант, хранить все категории с нужными данными в таблице и потом при помощи запроса делать сразу подсчет.
Сейчас у меня тестовая таблица товаров, там около 1 млн. записей. Когда в таблице меняется как-то значение, то при первой загрузке сайта он может несколько секунд грузиться (потом, видимо, кешируется), и вот вопрос в том, на сколько может подняться производительность, если реализовать выборку по второму варианту? И есть ли еще более быстрый вариант?
  • Вопрос задан
  • 73 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы