0

我正在为自己开发一个新网站,其想法是在数据库中查询两个不同的位置,比较它们并显示同时具有买卖报价的位置。这让我知道我可以从位置 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表,并且当显示市场 数据时,它会执行一个 foreach 循环来查找与市场数据位置 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 个市场数据搜索和locationinfo搜索,但是当它试图全部显示时它会搞砸。我拿出一堆代码,只留下一个 foreach 循环,让它只显示一条数据,它没有任何实际问题。它有大约 29k 个结果。

有没有更有效的方法让我在页面显示期间比较数据?有没有办法让当前正在处理的数据有多个页面?我想在一个页面上有 50 个项目,但除了在查询上设置一个 LIMIT 之外我不知道该怎么做,但这不会让我先比较每个项目以查看哪个项目最多利润将其显示在顶部。

我希望我清楚地解释了这一点。感谢任何人都可以提供的任何帮助!

4

1 回答 1

0

这是我的猜测。仅从数据库中选择您真正需要的内容:

marketdata如果它与 2 个特定位置(即 34423 和 34453)有关

与IDlocation name匹配的ANDmarketdata 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
于 2013-04-27T15:28:21.480 回答