Php 比较多个MySQL项目并显示相似的项目
我正在为自己开发一个新的网站,其想法是查询两个不同地点的数据库,比较它们,并显示既有买卖报价的地点。这让我知道,我可以通过X从位置A和出售它在位置B的利润 这是我的桌子Php 比较多个MySQL项目并显示相似的项目,php,mysql,Php,Mysql,我正在为自己开发一个新的网站,其想法是查询两个不同地点的数据库,比较它们,并显示既有买卖报价的地点。这让我知道,我可以通过X从位置A和出售它在位置B的利润 这是我的桌子 Table: marketdata +-----------------------------------------------------+ | orderId | locationId | itemId | Price | sellorder | -------------------------------
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表中获取数据,如果它与两个特定位置(即34423和34453)相关,我可以通过两个seprate查询来完成。然后我需要比较数据并检查我提取的任何项目是否相同(即订单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的结果,处理所有搜索并将其显示在屏幕上的速度相当慢。
有几次它只是超时,根本不显示任何内容
我知道它在我的数据库中查询2marketdata搜索和locationinfo搜索,但当它试图显示所有内容时,它会出错。我拿出一堆代码
只留下一个foreach循环,让它只显示一段数据,这样做没有任何实际问题。它有大约29k个结果
有没有更有效的方法让我在页面显示期间比较数据?是否有一种方法可以为当前正在处理的数据创建多个页面?比如说,我希望一页有50个项目
但我不知道如何做,除了对查询设置一个限制,但这不能让我首先比较每个项目,看看哪一项利润最大,然后将其显示在顶部
我希望我能解释清楚。谢谢任何人能提供的帮助 这是我的猜测。
仅从数据库中选择您真正需要的内容:
marketdata
如果其与两个特定位置(即34423和34453)相关
以及与marketdata location
ID匹配的location name
并且仅当购买价格高于任何特定商品的售价时,才显示位置。下一个查询提供了这些信息
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
有什么特别的原因让你不能用MySQL做这件事吗?如果购买订单高于销售订单
表中的购买订单
在哪里?我很想用MySQL做比较,但它还没有弄清楚怎么做。我读了一些关于使用不同语法的书,但是还没有任何东西。我真的不需要有人牵着我的手,给我确切的代码来使用,但朝着正确的方向推动一下会有所帮助。谢谢如果我理解你的意思,购买订单可以在表中的任何地方,因为我下载它的地方收到的所有东西都放在那里。表数据没有任何特定顺序。我也无法在您的表中看到购买订单。另外,IE订单31434和34415是同一类型的
您指的是什么类型的itemId
?这与我最后做的类似。谢谢你的意见!