MySQL(和PHP)单个查询,单个表,多个限定符

时间:2010-12-09 02:58:31

标签: php mysql

这是我的第一个问题,所以我试着说清楚(希望它不会太久!)

我正在使用MySQL和PHP来尝试比较源自MySQL销售数据表的php表中的数据与大致以下结构(数据代表在多个地点买卖的多个产品)。

price
quantity
type
buyflag
location

'buyflag'是布尔值,表示所记录的价格是否是该商品的买入或卖出价格,其中buyflag = true是购买商品的价格,buyflag = false表示该商品的价格在。出售。

我想要一个查询结果,当项目在第一个位置购买并在第二个位置出售时,按每个产品类型比较两个位置。换句话说,看起来像这样:

type |  quantity  |  'buyprice'  |  'sellprice'

其中'buyprice'是在1号位置购买的价格,'sellprice'是在2号位置出售的价格。

经过一些研究后,我已经能够使用连接和子查询来显示其他结果,但在这种情况下,当数据全部在一个表中时,如何查询此特定查询中的最后两列似乎很难过要求两个WHERE语句来挖掘它。

select type, quantity, max(price) as buyprice
from marketfile
where (buyflag=true and location=102)
group by type;

将获得前3列,或

select type, quantity, min(price) as sellprice
from marketfile
where (buyflag=false and location=75)
group by type;

将获得第一,第二和第四列但我无法弄清楚如何在一个查询中获取所有内容。

到目前为止,我相当糟糕的子查询工作(失败)是:

select type, quantity, min(price) as buyprice,
(select max(price) from marketfile where (buyflag=false and location=75)) as sellprice
from marketfile
where (buyflag=true and location=102)
group by type;

我在单个查询中喜欢它的原因是然后使用PHP将查询显示为表格,这样我就可以查看在位置1购买的数百个项目的列表,并在位置2处出售并查看按产品划分的特定路线的边距。

我很想通过使用上面的两个单独的查询来解决我的MySQL不足之处,并将它们转储到一个新表中,然后重新查询该表。如果我想要处理许多位置并因此指数增加路由数量(以及因此使用的表),这种解决方法似乎并不特别优雅。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您希望将表marketfile中的两行合并为一个输出行。要实现这一点,您必须自己加入表。您可以通过将其两次放入FROM子句并为其赋予别名来实现:

SELECT a.type, …
FROM marketfile as a, marketfile as b
WHERE (a.type = b.type) AND (a.location = 102) AND (b.location = 75) AND …

确保将所有必要的连接条件放入WHERE子句中以仅选择相应的记录。否则,查询将永远占用并返回太多结果。

相关问题