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

时间:2013-04-27 01:50:47

标签: php mysql

我正在为自己创建一个新网站,它的想法是在数据库中查询两个不同的位置,比较它们并显示同时具有卖出和买入要约的位置。这让我知道我可以通过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,但这不会让我先比较每个项目,看看哪一个有最大的利润,以显示在顶部。

我希望我能清楚地解释清楚。感谢任何人都能提供的帮助!

1 个答案:

答案 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