SQL Server返回不同的结果

时间:2017-09-29 16:06:16

标签: php sql json sqlsrv

下面的代码返回一个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}]}

每次通话后都不会改变。

这是什么意思?

0 个答案:

没有答案