我正在尝试在 MySQL 中编写查询并在 PHP 中输出,但事实证明这相当困难。
我有一个包含 3 列的表格(是的,我知道这的数据库布局不是最好的,但我无法更改它,客户端有其他软件使用这个具有这种布局的数据库)
Amount - Product - Package
2 - Apple - Fruitbasket1
1 - Pear - Fruitbasket1
5 - Grape - Fruitbasket1
2 - Apple - Fruitbasket2
1 - Pear - Fruitbasket2
9 - Banana - Fruitbasket2
到目前为止,我想到了这个:
SELECT package
FROM `data`
WHERE package IN
(
SELECT package
FROM `data`
WHERE product = 'apple' AND amount = '2'
)
AND package IN
(
SELECT package
FROM `data`
WHERE product = 'pear' AND amount ='1'
)
AND package IN
(
SELECT package
FROM `data`
WHERE product = 'grape' AND amount = '5'
)
LIMIT 0,1
问题是当客户在表格中填写“苹果”和“2”时,它会返回所有包含 2 个苹果的篮子。我需要的是一份声明,该声明将只接受确切的产品及其数量以退还这些成分所属的一个篮子,或者什么都不接受。
因此,即使 Fruitbasket1 中有 1 个梨和 2 个苹果,如果客户未指定另一部分,即 5 个葡萄,则结果不应为 Fruitbasket1。
最佳答案
此查询将返回唯一产品为 2 个苹果的所有包裹
select package from `data`
group by package
having count(case when amount = 2 and product = 'Apple' then 1 end) = 1
and count(*) = 1
例如,如果你想要 1 个梨和 2 个苹果
select package from `data`
group by package
having count(
case
when (amount = 2 and product = 'Apple') or (amount = 1 and product = 'Pear')
then 1
end) = 2
and count(*) = 2
你也可以这样写
select package from `data`
group by package
having count(case when amount = 2 and product = 'Apple' then 1 end) = 1
and count(case when amount = 1 and product = 'Pear' then 1 end) = 1
and count(*) = 2
关于php - 无法从 MySQL 查询中获得所需的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25997509/