我正在为自己工作一个新的网站,它的想法是查询DB的两个不同的位置,比较它们,并显示有出售和购买报价的位置。这让我知道我可以从地点A购买X,然后在地点B出售以获得利润。
这是我的表格
Table: marketdata
+-----------------------------------------------------+
| orderId | locationId | itemId | Price | sellorder |
------------------------------------------------------+
| 34444 | 23444 | 23 | 33 | Sell |
| 31434 | 34423 | 234 | 10.5 | Sell |
| 34415 | 34453 | 234 | 12.5 | Buy |
| 36436 | 33451 | 234 | 13.5 | Sell |
+-----------------------------------------------------+
table: locationinfo
+------------------+
| locId | locName |
+--------+---------+
| 23444 | west |
| 34423 | east |
| 34453 | north |
| 33451 | south |
+------------------+
我需要做的是从marketdata表中获取数据,如果它与2个特定位置(IE 34423和34453)相关,我通过2个单独的查询做到这一点。然后,我需要比较数据并检查我提取的任何项目是否相同(IE订单31434和34415是相同的ItemId)。如果它们是相同的,那么我需要看看买入订单是否高于卖出订单。如果是,则显示该信息。我还有一个查询,它拉出整个locationinfo表,并作为marketdata,它执行foreach循环查找与marketdata位置ID匹配的位置名称,以便我知道它们在哪里。
下面是我的PHP的总体外观:foreach (selldata as sell)
{
foreach(buydata as buy)
{
if(buydata['itemId'] == selldata['itemId'])
{
if(buydata['price'] > selldata['price']
{
foreach(locations as loc)
{
if(loc['locId'] == sell['locationId'])
{
display sell location info
break;
}
}
display rest of sell info
foreach(locations as loc]
{
if(loc['locId'] == buy['locationId'])
{
display buy location info
break;
}
display rest of buy info
}
}
}
}
}
这对于我尝试的一些搜索非常有效,但我做的最后一个有超过29k个结果,处理它并在我的屏幕上显示它相当慢。有几次它会超时,根本不显示任何东西。
我知道它查询我的数据库的2 marketdata搜索和locationinfo搜索,但它搞砸了,当它试图显示它所有。我拿出了一堆代码只留下一个foreach循环让它只显示一段数据它这样做没有任何问题。它有大约29k个结果。
在页面显示期间,是否有更有效的方法来比较数据?是否有一种方法可以为当前正在处理的数据提供多个页面?我想在一页上有50个项目但我不知道如何做到这一点,除了在查询上设置一个限制,但这不会让我先比较每个项目,看看哪一个有最大的利润显示在顶部。
我希望我解释清楚了。感谢任何人提供的任何帮助!以下是我的猜测。只从数据库中选择真正需要的数据:
marketdata
,如果它与2个特定位置(IE 34423和34453)有关
AND location name
匹配marketdata location
ID
AND仅当购买price is higher
比任何特定项目的销售价格时显示位置。下一个查询提供信息
There are 1 rows resulting from:
QUERY:
SELECT MAX(price), itemId, locationId, locName FROM marketdata
LEFT OUTER JOIN locationinfo ON marketdata.locationId = locationinfo.locId
WHERE (marketdata.locationId = 34423 OR marketdata.locationId = 34453)
AND sellorder = 'Buy'
GROUP BY itemId
MAX(price) itemId locationId locName
14.5 234 34423 east