比较多个MySQL项目,并显示那些相似的


Comparing multple MySQL items and displaying the ones that are similar

我正在为自己工作一个新的网站,它的想法是查询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