我有一个带有多个连接的复杂 MSSQL 查询。当我使用 SQL 查询分析器查询时,它会在大约 5 分钟后返回结果。但是,当我使用 PHPmssql_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);
编辑我
我缩小到一个地方。当我O.nOrders
从 SELECT 子句中删除部分时,查询工作得很好。
但为什么???
编辑二
这真让我抓狂。查询有时甚至可以O.nOrders
在 SELECT 子句中使用。这对我来说似乎完全随机,但我知道这个世界上没有真正随机的东西......应该有一个原因......