0

我有一个带有多个连接的复杂 MSSQL 查询。当我使用 SQL 查询分析器查询时,它会在大约 5 分钟后返回结果。但是,当我使用 PHPmssql_query()函数查询时,它返回一个mssql_query() failed没有有用信息的错误。

以下是迄今为止对这个问题的分析。

  1. php服务器的响应时间限制不是问题。时间限制设置为无限。事实上,同样的查询在不同的生产服务器上大约 30 秒后返回结果。

  2. 我尝试使用 mssql_get_last_message() 来获取有关失败原因的更多详细信息。但到目前为止,没有运气。我得到的只是“将数据库上下文更改为'dbsdb'”,其中'dbsdb'是我正在查询的数据库的名称。

这是我正在使用的查询,如果这很重要的话。

SELECT L.[strStation], L.[nEntitlement1], L.[nEntitlement2], O.nOrders,
        L.[nEntitlement3], L.[nEntitlement4], S.[strFirm], S.[nStatus],
        S.[nFeatures], S.[nFeatures2], S.[nFeatures3], S.[strDescription]
FROM   [tblLogin] AS L
LEFT JOIN [tblStation] AS S ON L.[strStation] = S.[strStation]
     LEFT JOIN (
                   SELECT [strStation], COUNT(DISTINCT(nRecordId)) as nOrders
                   FROM   [tblOrder]
                   WHERE  [timeOrderDate] >= '2013-06-04' AND
                          [timeOrderDate] <= '2013-06-28'
                   GROUP BY strStation
               ) AS O ON O.[strStation] = S.[strStation]
        WHERE  L.[timeLoginTime] >= '2013-06-04 00:00:00' AND
               L.[timeLoginTime] <= '2013-06-28 23:59:59' AND
               S.[strFirm] in ('FIRMA','FIRMB')

这是我用来查询的代码。

$link = mssql_connect('192.168.251.90', 'sa', '');
if (!mssql_select_db('dbsdb', $link))
    var_dump(mssql_get_last_message());
$query = mssql_query($sql, $link);

编辑我

我缩小到一个地方。当我O.nOrders从 SELECT 子句中删除部分时,查询工作得很好。

但为什么???

编辑二

这真让我抓狂。查询有时甚至可以O.nOrders在 SELECT 子句中使用。这对我来说似乎完全随机,但我知道这个世界上没有真正随机的东西......应该有一个原因......

4

0 回答 0