我正在研究一个包含子查询的mySQL查询的轻微复杂(至少对我而言)并不诚实.
SELECT `products`.`id`, `product`.`price`,
( SELECT `value` FROM (`productValues`)
WHERE `productValues`.`product` = 'product.id'
) as values
FROM (`products`) WHERE`product`.`active` = 1
目前的结果如下:
Array
(
[0] => Array
(
[id] => 1
[active] => 1
[price] => 1000
[values] =>
)
)
我想要的是values元素也成为一个数组,其中Values表中的所有元素都匹配(WHERE productValues.product = product.id).
我究竟做错了什么?
解决方法:
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有一行(BTW,不建议使用像’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'];
}
我给出的结构可能比您要求的结构更灵活,因为它允许您通过数组键访问特定产品.
标签:mysql,subquery
来源: https://codeday.me/bug/20190715/1463153.html