2012-03-23 50 views
1

所以我寫一個腳本,它需要大量數據的市場秩序和價格的歷史的形式,並計算它們的盈利能力和標記等是否有可能讓MySQL計算來自同一個表中兩個不同行的值?

現在,我有這個運行在PHP非常不錯,但它是相當緩慢。我想也許MySQL可能會對數據進行排序,然後只返回正確的數據,而不是返回所有內容並讓腳本通過它。腳本是一個php頁面,你可以想象得越快越好。

我一直在嘗試各種各樣,但似乎沒有工作。如果有人有任何想法,我很樂意聽到他們。

的marketinfo表中有這些列:
編號,項目Id,的stationID,BuyPrice,SellPrice,AvailableVolume,LASTUPDATED

的pricehistory表中有這些列:
編號,項目Id,RegionId,HistoryDate,卷

在這些表中的每個表中都有由ItemId標識的行,對於marketinfo,有兩行,一個用於工作站A和一個用於工作站B.在每個Ite的pricehistory表中還有一行中。我們通過使用一個交叉參考表格站找到這一行,這個站點指向StationId到RegionId等。

我們在pricehistory中使用的數據只是AVG(Volume),其中ItemId = x和RegionId = y。 marketinfo中的每個商品有兩行使用。買點和賣點。

如果我們叫買數據行B和賣數據行S,我需要說的是選擇所有物品在哪裏(S.SellPrice/B.BuyPrice)> 1.20,然後返回SellPrice,AvailableVolume,LastUpdated from S,BuyPrice from B,然後使用ItemId & StationId將其加入pricehistory並獲得AVG(卷),然後將其加入ItemId上的項目數據庫以獲取ItemName。

正如你所看到的,這是MySQL的一大屁股查詢。我遇到的麻煩是從同一張表中選擇兩行。

TLDR:我需要這樣的東西:

select * from ( 
    select * from marketinfo where StationId='1' as B 
    AND 
    select * from marketinfo where StationId='2' as S 
) 
where (S.SellPrice/B.BuyPrice) > 1.20 

我知道上面是不是有效的SQL但那是種事情我之後。

這可能嗎?或者更多,這怎麼可能?

非常感謝您接近這個漫長而令人困惑的帖子。

編輯:我想出了類似的東西。我覺得它的工作原理..

SELECT a.*, b.*, (a.SellPrice/b.BuyPrice) FROM marketinfo a, marketinfo b 
WHERE (a.SellPrice/b.BuyPrice) > 1.60 AND a.ItemId = b.ItemId 

回答

2

這是你在找什麼?

SELECT * FROM marketinfo AS t1 INNER JOIN marketinfo AS t2 ON t1.ItemId = t2.ItemId AND t2.StationId = 2 WHERE t1.StationId = 1 HAVING t2.SellPrice/t1.BuyPrice > 1.20

+0

我想可能是! – 2012-03-23 12:02:14

+0

這是行得通的,但我現在遇到了一個新問題。我有這個(http://pastebin.com/CErdc9iT),但我需要從pricehistory只得到最新的行,有點像一個ORDER BY的DateField DESC LIMIT 1.任何想法? – 2012-03-23 13:22:55

+0

回首這個現在我更清醒,「具有」條款很可能只是一個額外的「WHERE」條款。另外,我對數據庫結構以及回答該問題需要哪種結果集還不夠了解。 – MichaelRushton 2012-03-24 08:10:43

0

你可以做這樣的事情可能?

select * from 
(select * from marketinfo where StationId='1') as B, 
(select * from marketinfo where StationId='2') as S 
where (S.SellPrice/B.BuyPrice) > 1.20 
+0

這似乎不工作,不知道爲什麼,但會導致phpmyadmin的實際崩潰!奇怪,但謝謝! – 2012-03-23 12:58:11

+0

嗯,怪異,我不能夠產生你所描述的錯誤。但是我從你原來的帖子中讀到,你已經有了一些可行的東西,所以它可能不值得打擾。 :) – 2012-03-23 21:00:17

相關問題