Объеденение 15 запросов в один, использующих функцию IN()

Гриша К.

Новичок
Объеденение 15 запросов в один, использующих функцию IN()

Здравствуйте.
Есть следующая задача:

PHP:
PRICE_OPTION  
price_id | option_id | product_id 
   1           1           100 
   1           10          100 
   2           1           100 
   2           11          100 
   3           2           105 
   3           10          105
Из таблицы необходимо извлеч price_id для product_id = 100, где option_id = 1 и 10,
для product_id = 105, где option_id = 2 и 10 и т.д.
PHP:
// Пример нужного результата 
PRICE_OPTION  
price_id | product_id 
   1           100 
   3           105
Получается, что есть не менее 15 идентификаторов product_id, для которых нужно извлеч price_id, c определенным значение option_id.
При использовании цикла php получится не менее 15 запросов к БД (до 30), я до сих пор незнаю нормально ли такое кол-во запросов и как это можно выяснить, поэтом пытаюсь щас объеденить все в один запрос.
Прошу ваших советов и возможно примеров, по решению данной задачи.

По ошибке создал сообщение не в том разделе, хотел сделать в подразделе MySQL
 

bgm

 
Комбинация GROUP BY, HAVING и UNION.
Запрос, естественно, конструируешь динамически.
 

Гриша К.

Новичок
bgm, спасибо за ответ.
Забыл написать: чтобы извлеч price_id для option_id = 1 и 10, из таблицы PRICE_OPTION, при отсутствии поля product_id, есть следующий вариант запроса:

PHP:
SELECT COUNT(*) AS `cnt`, price_id 
FROM price_option 
WHERE option_id IN (1,10) 
GROUP BY price_id 
HAVING cnt = ".count(2)."
Об использовании Union я тоже думал, в таком случае у меня получается 15 запросо к базе данных, при налиичии 15 значений product_id. Нормально ли такое кол-во запросов и где тогда про это можно прочитать?

-~{}~ 11.07.06 12:56:

Я решил использовать другую схему, при которой мне не нужен данный вариант запроса, но напишу вариант решения который я нашел:
PHP:
SELECT 
	COUNT(*) AS count, 
	price_id, 
	product_id, 
	price
FROM 
	price_option
WHERE 
	product_id IN(100,105) and 
CASE 
WHEN product_id = 100 THEN option_id IN(1,10) 
WHEN product_id = 105 THEN option_id IN(2,10)  
END
GROUP BY price_id
HAVING 
CASE 
WHEN product_id = 100 THEN count = 2
WHEN product_id = 105 THEN count = 2 
END
ORDER BY product_id
Получается, что как бы я объеденяю запросы при помощи UNION, но запрос к БД получается один. Хотел бы на будущее узнать от вас, нормальный ли тако способ запроса?
 
Сверху