Наимение затратная выборка из базы по ресурсам

.scu

Новичок
есть таблица следующей структуры (а также пример данных в данной таблице)
Код:
CREATE TABLE `catalogue_params` (
  `good_id` int(10) unsigned NOT NULL default '0',
  `param_id` int(10) unsigned NOT NULL default '0',
  `param_value` text NOT NULL,
  PRIMARY KEY  (`good_id`,`param_id`)
) 

INSERT INTO `catalogue_params` VALUES (1, 7, 'без наполнителя');
INSERT INTO `catalogue_params` VALUES (1, 2, 'с 4 мес');
INSERT INTO `catalogue_params` VALUES (1, 4, 'рисовая');
INSERT INTO `catalogue_params` VALUES (1, 3, 'молочные');
INSERT INTO `catalogue_params` VALUES (1, 1, 'Беби-Колинска');
INSERT INTO `catalogue_params` VALUES (2, 7, 'яблоко');
INSERT INTO `catalogue_params` VALUES (2, 2, '2х лет');
INSERT INTO `catalogue_params` VALUES (2, 4, 'риса');
INSERT INTO `catalogue_params` VALUES (2, 3, 'молочные');
INSERT INTO `catalogue_params` VALUES (2, 1, 'нутрилон');
как можно наименее затратно сделать из таблице следующую выборку:
выбрать все ID товаров (good_id), которые соответствуют нескольким характеристикам параметров одновременно. К примеру, где param_id:
[1] => Беби-Колинска
[2] => с 4 мес
[3] => молочные
[4] => рисовая
[7] => без наполнителя
 

.scu

Новичок
пока придумался такой вариант (но может есть что-то более оптимальное, с учетом, что база может быть очень большая 1000к+ записей)

Код:
SELECT good_id, count(*)as COUNT FROM catalogue_params WHERE (param_id=$key && param_value="$value") OR (param_id=$key1 && param_value="$value1") ... OR  (param_id=$keyN1 && param_value="$valueN")  GROUP BY good_id'
Соответственно далее сверяем если count = кол-ву параметров, то товар нам подходит (у одного товара не может быть одного и того же параметра с разными значениями)
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
(param_id=$key && param_value="$value") OR (param_id=$key1 && param_value="$value1")
Блин, ну неужели даже в голову не приходит более "оптимальное", да и, по-моему, очевидное решение?
 
Сверху