我有一个带有多个连接的复杂MSSQL查询。当我使用SQL查询分析器进行查询时,它会在消耗大约5分钟后返回结果。但是,当我使用PHP mssql_query()
函数进行查询时,它会返回错误mssql_query() failed
而没有任何有用的信息。
以下是迄今为止对此问题的分析。
php服务器的响应时间限制不是问题。时间限制设置为无限。实际上,这个相同的查询在不同的生产服务器上返回大约30秒后的结果。
我尝试使用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);
编辑我
我缩小到一个地方。当我从SELECT子句中删除O.nOrders
部分时,查询完全正常。
但为什么???
编辑II
这让我发疯了。查询有时甚至在SELECT子句中使用O.nOrders
部分。这对我来说似乎是完全随机的,但我知道在这个世界上没有真正随意的东西......应该有一个理由......