SELECT p.id, p.price, pv.`value`
FROM products p
JOIN productValues pv
ON p.product_id=pv.product
WHERE p.active = 1
ORDER BY p.id;
дает таблицу с одной строкой для каждого значения pv.value (кстати, использование зарезервированных слов, таких как «значение», не рекомендуется).Упорядочение вывода по p.id гарантирует, что все строки для определенного продукта находятся вместе.Итак, на прикладном уровне циклически перебирайте строки, меняя продукт при каждом изменении p.id.
$old_id=NULL;
$datastructure=array();
while($arr=$result->fetch_assoc()){
if($arr['id']!=$old_id){
$datastructure[$arr['id']][price]=$arr['price'];
$old_id=$arr['id'];
}
$datastructure[$arr['id']]['values'][]=$arr['value'];
}
Структура, которую я дал, возможно, более гибкая, чем та, которую вы запрашивали, в том смыслепозволяет получить доступ к определенному продукту через ключ массива.