Извлеч данные из таблицы для которых в одном столбце есть общее значение...

Гриша К.

Новичок
Извлеч данные из таблицы для которых в одном столбце есть общее значение...

Здраствуйте.
Подскажите пожалуйста решения следующей задачи.

К примеру есть такая таблица:
PHP:
PRICE_OPTION
price_id | option_id
   1           1
   1           10
   2           1
   2           11
   3           2
   3           10
Из этой таблицы надо извлеч общий price_id,
где option_id = 1 и option_id = 10, т.е в данном случае получается price_id должен быть равен 1.
 

zerkms

TDD infected
Команда форума
как-нибудь так:
[sql]
SELECT * FROM `price_option` `t1` INNER JOIN `price_option` `t2` ON `t1`.`price_id` = `t2`.`price_id` AND `t2`.`option_id` = 10 WHERE `t1`.`option_id` = 1
[/sql]
 

Гриша К.

Новичок
zerkms, спасибо за ответ, так действительно получается.

Теоретичсеки, как возможно было бы сделать запрос, возможно предварительно обработав и втавив в него какие-то переменные, если кол-во option_id для которых нужно найти общий price_id может быть от 2 и более?
 

zerkms

TDD infected
Команда форума
Гриша К.
конкретизируй требования. просто 2 и более? тогда GROUP BY, COUNT, HAVING
 

Гриша К.

Новичок
zerkms, может быть такое, что
надо извлеч общий price_id, где option_id = 1 и option_id = 10 и option_id = 20 и т.д.
COUNT (кол-во) не знаю чем будет полезно в данном случае;
GROUP BY - сгрупировать что, не могу понять
И в HAVING, какое я условие могу вставить

Если бы можно было сгрупировать по price_id, таким образом, чтобы для него было условие where option_id = 1 и option_id = 10 и option_id = 20, но я такая ведб группировка неполучится?

Я просто даже вариант представить немогу, чтобы хотябы попробовать запрос, никак в голове блин не укладывается это все.
 

zerkms

TDD infected
Команда форума
в этом разделе уже миллион раз обсуждался этот вариант:
SELECT COUNT(*) AS `cnt` ...
WHERE `f` IN (1, 2, 3)
GROUP BY `f2`
HAVING `cnt` = 3
 

Гриша К.

Новичок
zerkms, спасибо большое за приведенный пример, немогу разобраться как и менно он работает (щас разбираю), но он извлекает данные как надо, для разных вариантов (кол-во option_id):
PHP:
$option = array();
$option[] = 1;
$option[] = 10;
$option[] = 21;

$option_list = '';
foreach ($option as $key => $value)
{
	if ($key != (count($option)-1))
		$option_list .= $value.', ';
	else
		$option_list .= $value; 
}
// $option_list = '1, 10, 21';


$result = mysql_query(
    SELECT COUNT(*) AS `cnt`, price_id
    FROM price_option
    WHERE option_id IN (".$option_list.")
    GROUP BY price_id
    HAVING cnt = ".count($option)."
Поиском, я не пользовался, потому что незнал что искать (какие ключевые слова).
Вы очень сильно помогли.

-~{}~ 09.07.06 21:00:

Возникла необходимость сотавления следующего запроса:

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), я до сих пор незнаю нормально ли такое кол-во запросов и как это можно выяснить, поэтом пытаюсь щас объеденить все в один запрос.

-~{}~ 11.07.06 12:58:

http://phpclub.ru/talk/showthread.php?s=&postid=628697
 
Сверху