下面的代码返回一个json数据集,每次运行时都会有不同的结果。例如,有一次我会运行它并获得2,100个结果,然后下一个我将获得2,200个结果。然后我会再次运行它并得到2,150个结果。这些结果不应该改变那么多。另外,如果我将这些结果与TSQL进行比较,我会丢失使用SQL Server的记录。最后,这只发生在我返回大约1,500多个结果时。
<?php
session_start();
require('index.php');
$serverName = "****";
$connectionOptions = array(
"Database" => "****",
"Uid" => "****",
"PWD" => "****",
'ReturnDatesAsStrings'=>true
);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
ini_set('memory_limit', '4096M');
//Establishes the connection
$conn = sqlsrv_connect($serverName, $connectionOptions);
if(isset($_SESSION['User'],$_SESSION['Hash'])){
$User = addslashes($_SESSION['User']);
$Hash = addslashes($_SESSION['Hash']);
$r = sqlsrv_query($conn,"SELECT * FROM Connection WHERE Connector='{$User}' AND Hash='{$Hash}'");
$array = sqlsrv_fetch_array($r,SQLSRV_FETCH_ASSOC);
if(!isset($array['ID']) || !is_numeric($_GET['ID'])){?><html><head><script>document.location.href='../login.php';</script></head></html><?php }
else {
//GET CALL SIGN
$r = sqlsrv_query($conn,"
SELECT
TicketO.ID AS ID,
TicketO.fDesc AS fDesc,
TicketO.CDate AS CDate,
TicketO.EDate AS EDate,
TicketO.Total AS Total,
'' AS DescRes,
TicketO.TimeSite AS TimeSite,
TicketO.TimeComp AS TimeComp,
TicketO.Who AS Caller,
TicketO.fBy AS Taken_By,
TicketO.Level AS Level,
TicketO.Cat AS Category,
Loc.ID AS Account,
Loc.Tag AS Tag,
Loc.Tag AS Location,
Loc.Address AS Address,
Loc.Address AS Street,
Loc.City AS City,
Loc.State AS State,
Loc.Zip AS Zip,
Job.ID AS Job_ID,
Job.fDesc AS Job_Description,
OwnerWithRol.ID AS Owner_ID,
OwnerWithRol.Name AS Customer,
JobType.Type AS Job_Type,
Elev.Unit AS Unit_Label,
Elev.State AS Unit_State,
TickOStatus.Type AS Status,
Emp.fFirst AS Worker_First_Name,
Emp.Last AS Worker_Last_Name,
'' AS Regular,
'' AS Overtime,
'' AS Doubletime,
'' AS On_Site,
'' AS Completed
FROM
((((((TicketO
LEFT JOIN Loc ON TicketO.LID = Loc.Loc)
LEFT JOIN Job ON TicketO.Job = Job.ID)
LEFT JOIN OwnerWithRol ON TicketO.Owner = OwnerWithRol.ID)
LEFT JOIN JobType ON Job.Type = JobType.ID)
LEFT JOIN Elev ON TicketO.LElev = Elev.ID)
LEFT JOIN TickOStatus ON TicketO.Assigned = TickOStatus.Ref)
LEFT JOIN Emp ON Emp.fWork = TicketO.fWork
WHERE
TicketO.LID = '{$_GET['ID']}'
;");
$data = array();
if($r){while($Ticket = sqlsrv_fetch_array($r,SQLSRV_FETCH_ASSOC)){$data[] = $Ticket;}}
$r = sqlsrv_query($conn,"
SELECT
TicketD.ID AS ID,
TicketD.fDesc AS fDesc,
TicketD.CDate AS CDate,
TicketD.EDate AS EDate,
TicketD.Total AS Total,
TicketD.DescRes AS DescRes,
TicketD.TimeSite AS TimeSite,
TicketD.TimeComp AS TimeComp,
TicketD.Who AS Caller,
TicketD.fBy AS Taken_By,
TicketD.Level AS Level,
TicketD.Cat AS Category,
Loc.ID AS Account,
Loc.Tag AS Tag,
Loc.Tag AS Location,
Loc.Address AS Address,
Loc.Address AS Street,
Loc.City AS City,
Loc.State AS State,
Loc.Zip AS Zip,
Job.ID AS Job_ID,
Job.fDesc AS Job_Description,
OwnerWithRol.ID AS Owner_ID,
OwnerWithRol.Name AS Customer,
JobType.Type AS Job_Type,
Elev.Unit AS Unit_Label,
Elev.State AS Unit_State,
Emp.fFirst AS Worker_First_Name,
Emp.Last AS Worker_Last_Name,
TicketD.Reg AS Regular,
TicketD.OT AS Overtime,
TicketD.DT AS Doubletime,
TicketD.TimeSite AS On_Site,
TicketD.TimeComp AS Completed,
'Completed' AS Status
FROM
(((((TicketD
LEFT JOIN Loc ON TicketD.Loc = Loc.Loc)
LEFT JOIN Job ON TicketD.Job = Job.ID)
LEFT JOIN OwnerWithRol ON Loc.Owner = OwnerWithRol.ID)
LEFT JOIN JobType ON Job.Type = JobType.ID)
LEFT JOIN Elev ON TicketD.Elev = Elev.ID)
LEFT JOIN Emp ON Emp.fWork = TicketD.fWork
WHERE
TicketD.Loc='{$_GET['ID']}'
AND NOT (TicketD.DescRes LIKE '%Voided%')
;");
if($r){while($Ticket = sqlsrv_fetch_array($r,SQLSRV_FETCH_ASSOC)){$data[] = $Ticket;}}
$r = sqlsrv_query($conn,"
SELECT
TicketDArchive.ID AS ID,
TicketDArchive.fDesc AS fDesc,
TicketDArchive.CDate AS CDate,
TicketDArchive.EDate AS EDate,
TicketDArchive.Total AS Total,
TicketDArchive.DescRes AS DescRes,
TicketDArchive.TimeSite AS TimeSite,
TicketDArchive.TimeComp AS TimeComp,
TicketDArchive.Who AS Caller,
TicketDArchive.fBy AS Taken_By,
TicketDArchive.Level AS Level,
TicketDArchive.Cat AS Category,
Loc.ID AS Account,
Loc.Tag AS Tag,
Loc.Tag AS Location,
Loc.Address AS Address,
Loc.Address AS Street,
Loc.City AS City,
Loc.State AS State,
Loc.Zip AS Zip,
Job.ID AS Job_ID,
Job.fDesc AS Job_Description,
OwnerWithRol.ID AS Owner_ID,
OwnerWithRol.Name AS Customer,
JobType.Type AS Job_Type,
Elev.Unit AS Unit_Label,
Elev.State AS Unit_State,
Emp.fFirst AS Worker_First_Name,
Emp.Last AS Worker_Last_Name,
TicketDArchive.Reg AS Regular,
TicketDArchive.OT AS Overtime,
TicketDArchive.DT AS Doubletime,
TicketDArchive.TimeSite AS On_Site,
TicketDArchive.TimeComp AS Completed,
'Completed' AS Status
FROM
(((((TicketDArchive
LEFT JOIN Loc ON TicketDArchive.Loc = Loc.Loc)
LEFT JOIN Job ON TicketDArchive.Job = Job.ID)
LEFT JOIN OwnerWithRol ON Loc.Owner = OwnerWithRol.ID)
LEFT JOIN JobType ON Job.Type = JobType.ID)
LEFT JOIN Elev ON TicketDArchive.Elev = Elev.ID)
LEFT JOIN Emp ON Emp.fWork = TicketDArchive.fWork
WHERE
TicketDArchive.Loc='{$_GET['ID']}'
AND NOT (TicketDArchive.DescRes LIKE '%Voided%')
;");
if($r){while($Ticket = sqlsrv_fetch_array($r,SQLSRV_FETCH_ASSOC)){$data[] = $Ticket;}}
print json_encode(array('data'=>$data));
}
}
sqlsrv_close($conn);
?>
收到评论后,通过sql计算我的记录:
$r = sqlsrv_query($conn,"
SELECT
Count(*) as Count_of_TicketO
FROM
((((((TicketO
LEFT JOIN Loc ON TicketO.LID = Loc.Loc)
LEFT JOIN Job ON TicketO.Job = Job.ID)
LEFT JOIN OwnerWithRol ON TicketO.Owner = OwnerWithRol.ID)
LEFT JOIN JobType ON Job.Type = JobType.ID)
LEFT JOIN Elev ON TicketO.LElev = Elev.ID)
LEFT JOIN TickOStatus ON TicketO.Assigned = TickOStatus.Ref)
LEFT JOIN Emp ON Emp.fWork = TicketO.fWork
WHERE
TicketO.LID = '{$_GET['ID']}'
;");
$data = array();
if($r){while($Ticket = sqlsrv_fetch_array($r,SQLSRV_FETCH_ASSOC)){$data[] = $Ticket;}}
$r = sqlsrv_query($conn,"
SELECT
Count(*) as Count_of_TicketO
FROM
(((((TicketD
LEFT JOIN Loc ON TicketD.Loc = Loc.Loc)
LEFT JOIN Job ON TicketD.Job = Job.ID)
LEFT JOIN OwnerWithRol ON Loc.Owner = OwnerWithRol.ID)
LEFT JOIN JobType ON Job.Type = JobType.ID)
LEFT JOIN Elev ON TicketD.Elev = Elev.ID)
LEFT JOIN Emp ON Emp.fWork = TicketD.fWork
WHERE
TicketD.Loc='{$_GET['ID']}'
AND NOT (TicketD.DescRes LIKE '%Voided%')
;");
if($r){while($Ticket = sqlsrv_fetch_array($r,SQLSRV_FETCH_ASSOC)){$data[] = $Ticket;}}
$r = sqlsrv_query($conn,"
SELECT
Count(*) as Count_of_TicketDArchive
FROM
(((((TicketDArchive
LEFT JOIN Loc ON TicketDArchive.Loc = Loc.Loc)
LEFT JOIN Job ON TicketDArchive.Job = Job.ID)
LEFT JOIN OwnerWithRol ON Loc.Owner = OwnerWithRol.ID)
LEFT JOIN JobType ON Job.Type = JobType.ID)
LEFT JOIN Elev ON TicketDArchive.Elev = Elev.ID)
LEFT JOIN Emp ON Emp.fWork = TicketDArchive.fWork
WHERE
TicketDArchive.Loc='{$_GET['ID']}'
AND NOT (TicketDArchive.DescRes LIKE '%Voided%')
;");
if($r){while($Ticket = sqlsrv_fetch_array($r,SQLSRV_FETCH_ASSOC)){$data[] = $Ticket;}}
我有以下json结果集
{"data":[{"Count_of_TicketO":16},{"Count_of_TicketO":2554},{"Count_of_TicketDArchive":1730}]}
每次通话后都不会改变。
这是什么意思?