我正在为自己创建一个新网站,它的想法是在数据库中查询两个不同的位置,比较它们并显示同时具有卖出和买入要约的位置。这让我知道我可以通过X从位置A出售并在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循环,让它只显示一个数据,并且没有任何实际问题。它有大约29,000个结果。
在页面显示期间,我是否有更有效的方法来比较数据?有没有办法为当前正在处理的数据提供多个页面?我想在一个页面上有50个项目 但我不知道如何做到这一点,除了在查询上设置LIMIT,但这不会让我先比较每个项目,看看哪一个有最大的利润,以显示在顶部。
我希望我能清楚地解释清楚。感谢任何人都能提供的帮助!
答案 0 :(得分:0)
这是我的猜测。 只从数据库中选择您真正需要的东西:
marketdata
如果它与2个特定位置(IE 34423和34453)相关
location name
ID 匹配的 AND marketdata location
仅在购买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