Запрос по параметрам?

seva2

Партнер PHPClub.ru
Запрос по параметрам?

[sql]
select * from products_properties as pp, products as p, products_to_categories as cat, products_description as pd where cat.products_id =p.products_id and p.products_id=pd.products_id and cat.categories_id='17' and pp.products_id=p.products_id and pp.options_id IN ( '142', '141') and pp.options_values_id IN ( '5065', '5073') and p.products_status = '1' order by pd.products_name having count(distinct pp.options_id) = 2
[/sql]

Если поиск веду по одому параметру
options_id = 142 options_values_id =5065

Все выводит как надо, то есть поиск соотвествует запросу

Если второй параметр добавляется, то не находит, хотя 100% с такими опциями товар есть.

Если убираю having count(distinct pp.options_id) = 2

То он мне возврашает продукта которые соотвествуют или 1 или второму признаку, а мне нужно чтобы и 1 и 2

Где ошибка, плиз хелп
 

SelenIT

IT-лунатик :)
seva2

Этот запрос ищет товары, отвечающие любому из условий:
options_id = 142 И options_values_id =5065
options_id = 142 И options_values_id =5073
options_id = 141 И options_values_id =5065
options_id = 141 И options_values_id =5073

А нужны, подозреваю, только такие: (options_id = 142 И options_values_id =5065) ИЛИ (options_id = 141 И options_values_id =5073).

И еще: большая просьба переформатировать код в своем посте, чтобы его можно было читать без прокрутки. Лучше оформить его не [рhp]...[/рhp], а [SQL]...[/SQL].
 

seva2

Партнер PHPClub.ru
Смотри в чем фишка
products_properties:
products_id options_id options_values_id
1 142 5065
1 141 5073

Так вот если оба эти условия выполняются, то мне нудо эти данные извлечь, как


Исправлено, сделал sql
 

Profic

just Profic (PHP5 BetaTeam)
[sql]
SELECT *
FROM products_properties AS pp, products AS p, products_to_categories AS cat, products_description AS pd
WHERE cat.products_id = p.products_id AND p.products_id = pd.products_id AND cat.categories_id = '17' AND pp.products_id = p.products_id AND pp.options_id
IN (
'142', '141'
) AND pp.options_values_id
IN (
'5065', '5073'
) AND p.products_status = '1'
ORDER BY pd.products_name
HAVING sum(pp.options_id = 142 and pp.options_values_id = 5065 or pp.options_id = 141 and pp.options_values_id = 5073) = 2
[/sql]
?

Или так
[sql]
SELECT *
FROM products_properties AS pp, products AS p, products_to_categories AS cat, products_description AS pd
WHERE cat.products_id = p.products_id AND p.products_id = pd.products_id AND cat.categories_id = '17' AND pp.products_id = p.products_id AND (
pp.options_id = 142 and pp.options_values_id = 5065 or pp.options_id = 141 and pp.options_values_id = 5073
) AND p.products_status = '1'
ORDER BY pd.products_name
HAVING COUNT(pp.options_id) = 2
[/sql]

А в оригинальном запросе ничего не выбирается, т.к. COUNT(pp.options_id) получается больше 2.
 

seva2

Партнер PHPClub.ru
[sql]
select * from products_properties as pp, products as p, products_to_categories as cat, products_description as pd where cat.products_id =p.products_id and p.products_id=pd.products_id and cat.categories_id='17' and pp.products_id=p.products_id and ( pp.options_id = '142' AND pp.options_values_id = '5065' or pp.options_id = '141' AND pp.options_values_id = '5069' ) and p.products_status = '1' order by pd.products_name HAVING COUNT( pp.options_id ) = 2


[/sql]
Так ничего не выдает

[sql]
select * from products_properties as pp, products as p, products_to_categories as cat, products_description as pd where cat.products_id =p.products_id and p.products_id=pd.products_id and cat.categories_id='17' and pp.products_id=p.products_id and ( pp.options_id = '142' AND pp.options_values_id = '5065' ) and p.products_status = '1' order by pd.products_name HAVING COUNT( pp.options_id ) = 1
[/sql]

так тоже ничего

[sql]
select * from products_properties as pp, products as p, products_to_categories as cat, products_description as pd where cat.products_id =p.products_id and p.products_id=pd.products_id and cat.categories_id='17' and pp.products_id=p.products_id and ( pp.options_id = '142' AND pp.options_values_id = '5065' ) and p.products_status = '1' order by pd.products_name HAVING COUNT( pp.options_id ) = 1
[/sql]

А вот так выдает! НО мне вдеь надо не по 1 параметру
 

Profic

just Profic (PHP5 BetaTeam)
seva2
Семен Семеныч. Ну подумаешь DISTINCT в COUNT пропустил, самому догадаться его туда впихуть нельзя было? :)

Хотя, стоп. То-то я никак не мог понять чего не хватает в этом запросе. Группировки! Он без группировки вообще черт знает что делает. И в чем разница между 2 и 3 запросами?
 
Сверху