Гриша К.
Новичок
Вывод производителей текущей категории из всей таблицы товаров
Здравствуйте.
Есть таблица товаров. Структура в кратце:
[sql]
CREATE TABLE `catalog_product` (
`product_id` int(11) NOT NULL auto_increment,
`category_id` int(11) NOT NULL default '0',
`firm_id` int(11) NOT NULL default '0',
PRIMARY KEY (`product_id`),
KEY `category_id` (`category_id`),
KEY `firm_id` (`firm_id`)
) ENGINE=InnoDB;
[/sql]
При выводе товаров по определенной категории, выводится список производителей текущей категории и подкатегорий. Запрос в кратце:
[sql]
SELECT
catalog_firm.firm_id,
firm_name
FROM
catalog_product,
catalog_firm
WHERE
catalog_product.firm_id = catalog_firm.firm_id AND
category_id IN(2, 0, 5, 6, 7, 8, 9, 10, 11, 12 )
GROUP BY firm_id
[/sql]
EXPLAIN (реальный, по описанному выше запросу. Всего записей в таблице "catalog_firm" - 11, в таблице catalog_product - 104):
Время выполнение запроса (на хостинге) колеблится от 0,0005 сек до 0,0034 сек (Иногда выдовалов 0,092 сек - при первом запросе).
----------------------------
У меня появились сомнения по поводу таких запросов, предположив что в таблице "catalog_firm" может быть 100 записей, а в "catalog_product" - 10000 записей.
Вот насколько нормально и эффективно использовать запросы такого вида? Правилен ли такой запрос, можно ли его использовать.
P.S. Запрос схожий с этим, используется также при выводе спика опций товаров (фильтр), в таком случае значения опций извлекаются только если они существуют минимум для одного товара.
Здравствуйте.
Есть таблица товаров. Структура в кратце:
[sql]
CREATE TABLE `catalog_product` (
`product_id` int(11) NOT NULL auto_increment,
`category_id` int(11) NOT NULL default '0',
`firm_id` int(11) NOT NULL default '0',
PRIMARY KEY (`product_id`),
KEY `category_id` (`category_id`),
KEY `firm_id` (`firm_id`)
) ENGINE=InnoDB;
[/sql]
При выводе товаров по определенной категории, выводится список производителей текущей категории и подкатегорий. Запрос в кратце:
[sql]
SELECT
catalog_firm.firm_id,
firm_name
FROM
catalog_product,
catalog_firm
WHERE
catalog_product.firm_id = catalog_firm.firm_id AND
category_id IN(2, 0, 5, 6, 7, 8, 9, 10, 11, 12 )
GROUP BY firm_id
[/sql]
EXPLAIN (реальный, по описанному выше запросу. Всего записей в таблице "catalog_firm" - 11, в таблице catalog_product - 104):
PHP:
id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra
1 | SIMPLE | catalog_firm | index | PRIMARY | PRIMARY | 4 | NULL | 12 |
1 | SIMPLE | catalog_product | ref | category_id,firm_id | firm_id | 4 | b9804.catalog_firm.firm_id | 6 | Using where
----------------------------
У меня появились сомнения по поводу таких запросов, предположив что в таблице "catalog_firm" может быть 100 записей, а в "catalog_product" - 10000 записей.
Вот насколько нормально и эффективно использовать запросы такого вида? Правилен ли такой запрос, можно ли его использовать.
P.S. Запрос схожий с этим, используется также при выводе спика опций товаров (фильтр), в таком случае значения опций извлекаются только если они существуют минимум для одного товара.