查询适用于SQL查询分析器,但在PHP mssql_query()上失败

时间:2013-07-16 20:11:02

标签: php sql sql-server

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

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

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

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

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

    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);
    

    编辑我

    我缩小到一个地方。当我从SELECT子句中删除O.nOrders部分时,查询完全正常。

    但为什么???

    编辑II

    这让我发疯了。查询有时甚至在SELECT子句中使用O.nOrders部分。这对我来说似乎是完全随机的,但我知道在这个世界上没有真正随意的东西......应该有一个理由......

0 个答案:

没有答案