Php 比较多个MySQL项目并显示相似的项目

Php 比较多个MySQL项目并显示相似的项目,php,mysql,Php,Mysql,我正在为自己开发一个新的网站,其想法是查询两个不同地点的数据库,比较它们,并显示既有买卖报价的地点。这让我知道,我可以通过X从位置A和出售它在位置B的利润 这是我的桌子 Table: marketdata +-----------------------------------------------------+ | orderId | locationId | itemId | Price | sellorder | -------------------------------

我正在为自己开发一个新的网站,其想法是查询两个不同地点的数据库,比较它们,并显示既有买卖报价的地点。这让我知道,我可以通过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表中获取数据,如果它与两个特定位置(即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
?这与我最后做的类似。谢谢你的意见!