Вы можете получить идентификаторы продукта, которые имеют все свойства, выполнив:
SELECT pp.property_id
FROM property_items pi INNER JOIN
product_properties pp
ON pi.id = pp.property_item_id INNER JOIN
products p
ON pp.product_id = p.id
WHERE pp.property_item_id IN ($ids)
GROUP BY pp.property_id
HAVING COUNT(DISTINCT pp.property_item_id) = $countIds -- has all of them
Обратите внимание, что я рационализировал соединения. Я думаю, что ваше упрощение запроса было не совсем правильным. Я также добавил псевдонимы таблиц, чтобы легче было писать и читать запрос.
Если вы хотите подсчитать количество таких продуктов, используйте подзапрос:
SELECT COUNT(*)
FROM (SELECT pp.property_id
FROM property_items pi INNER JOIN
product_properties pp
ON pi.id = pp.property_item_id INNER JOIN
products p
ON pp.product_id = p.id
WHERE find_in_set(pp.property_item_id, $ids)
GROUP BY pp.property_id
HAVING COUNT(DISTINCT pp.property_item_id) = $countIds -- has all of them
) ;
Ваша проблема, вероятно, из-за этой строки:
WHERE pp.property_item_id IN ($ids)
Если вы передаете $ids
в виде строки через запятую, ваш запрос не будет работать. Обратите внимание на замену выше.