<?php
$request = [
87=>'AMD',
86=>'8'
];
$filter = implode(' or ', array_fill(0, count($request), '(pv.property_id = ? and pv.value = ?)'));
$filter_values = [];
foreach($request as $key=>$val) {
$filter_values[] = $key;
$filter_values[] = $val;
}
$query = 'select p.* from products p
join property_values pv on p.id = pv.product_id
where ' . $filter . '
group by p.id, p.name
having count(distinct pv.id) = ' . count($request);