从字段 product_option_id获取随机关联数组对:product_option_value_id ,例如{" 230":" 23"," 228": " 19"},我必须从上面的TableX中的相应行中获得最小数量。
目前,我基于每一对通过PHP查询数据库,并存储它们的数量。 ie-如果有3对,我根据每对查询数据库3次,得到3个数量。然后我遍历数量以获得最少的数量。
如果随机{product_option_id:product_option_value_id}对是{" 230":" 23"," 228":" 19"} ,您能否制作出能够获得最小数量的高效SQL语句。
我试过了
SELECT quantity FROM TableX
WHERE product_option_id=variable_product_option_id
AND product_option_value_id=variable_product_option_value_id
我在所有对值的PHP for循环中运行它。我存储了quanity,并通过PHP获得至少一个
答案 0 :(得分:1)
您可以尝试这样的查询:
select product_option_id, product_option_value_id, min(quantity)
from product_option_value
where (product_option_id = 230 and product_option_value_id = 43)
or (product_option_id = 228 and product_option_value_id = 49)
group by product_option_id, product_option_value_id;
在实践中:
> create table product_option_value(product_option_id int, product_option_value_id int, quantity int);
> insert into product_option_value values
> (230, 43, 2),
> (230, 32, 1),
> (228, 49, 1),
> (228, 50, 0),
> (229, 50, 1),
> (229, 49, 1),
> (230, 43, 8),
> (230, 32, 9),
> (228, 49, 11),
> (228, 50, 10),
> (229, 50, 5),
> (229, 49, 4);
> select product_option_id, product_option_value_id, min(quantity)
> from product_option_value
> where (product_option_id = 230 and product_option_value_id = 43)
> or (product_option_id = 228 and product_option_value_id = 49)
> group by product_option_id, product_option_value_id;
+-------------------+-------------------------+---------------+
| product_option_id | product_option_value_id | min(quantity) |
+-------------------+-------------------------+---------------+
| 228 | 49 | 1 |
| 230 | 43 | 2 |
+-------------------+-------------------------+---------------+
您还应该正确引用查询参数。使用...product_option_id=".$key."...
之类的结构(摘自评论中的示例)容易出错,因为$key
可能包含任何内容,例如Little Boby Tables。
编辑:要获得所有此类组的最小值,您只需删除组和分组列,如下所示:
> select min(quantity)
> from product_option_value
> where (product_option_id = 230 and product_option_value_id = 43)
> or (product_option_id = 228 and product_option_value_id = 49);
+---------------+
| min(quantity) |
+---------------+
| 1 |
+---------------+
答案 1 :(得分:0)
我认为你应该尝试按照一个查询来获得结果。
要获得此类结果product_option_id:product_option_value_id
,您应该使用MYSQL的CONCAT
函数。
SELECT CONCAT(product_option_id,':',product_option_value_id)
FROM TABLE
WHERE subtract = 1
GROUP BY product_option_id
ORDER BY product_option_value_id ASC
此外,您可以在条件允许的情况下添加。
请试一试。