2010-12-09 37 views
1

這是我的第一個問題,所以我想清楚(希望它不會太長!)的MySQL(和PHP)單查詢,單個表,多個限定符

我使用MySQL和PHP嘗試將源自銷售數據的MySQL表的源自php表的數據與以下大致結構(數據表示在多個位置處購買和銷售的多個產品)進行比較。

price 
quantity 
type 
buyflag 
location 

「buyflag」是布爾值和表示記錄在價格是否是該項目正在被購買或在,出售價格,其中buyflag =真是價格項被買了和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不足之處,並將它們轉儲到一個新表中,然後重新查詢該表。如果我然後想要使用許多位置並因此呈指數級增長的路線數量(以及因此使用的表),此解決方法似乎並不特別優雅。

在此先感謝您的幫助。

+0

如果你添加代碼標籤到你的查詢中(它帶有'101 010`的小按鈕),它會使你的問題更具可讀性。 – LittleBobbyTables 2010-12-09 03:02:27

+0

謝謝LittleBobbyTables – lillebusy 2010-12-09 04:15:58

回答

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子句只選擇相應的記錄。否則,查詢將永遠消失並返回太多結果。