这个查询与php不兼容吗?它存在一个明显的语法错误,因为我无法运行它

时间:2019-05-20 11:01:24

标签: php sql ms-access codeigniter-3

因此,我目前正在为老板创建一个仪表板,从物流的角度显示数据,他向我发送了他自己的MS Access查询,在我的生命中,我无法使其运行,试图制作表格我们的工作人员可以从应该提取的数据中查看。有什么明显的错误吗?

我只是一个学徒,但我的年长者建议使用ORDER的所有内容都需要[]才能通过PHP和codeigniter运行,我尝试通过验证器更改语法,但我似乎遇到了麻烦。下面是原稿。

function order_table()
    {   
        $date = date("Y-m-d");
        $macsdb = $this->load->database('macs', TRUE);

$query = $macsdb->query("SELECT temp123.Hour, temp123.User, Count(temp123.[ORDER]) AS CountOfORDER, Sum(temp123.SumOfCountOfPRODUCT) AS SumOfSumOfCountOfPRODUCT, Sum(temp123.SumOfSumOfQUANTITY) AS SumOfSumOfSumOfQUANTITY
FROM (SELECT temp456.Hour, temp456.User, temp456.[ORDER], Sum(temp456.CountOfPRODUCT) AS SumOfCountOfPRODUCT, Sum(temp456.SumOfQUANTITY) AS SumOfSumOfQUANTITY
FROM (SELECT WHAUDIT.Date, Format([Time],'hh') AS [Hour], WHAUDIT.User, WHAUDIT.[ORDER], Count(WHAUDIT.PRODUCT) AS CountOfPRODUCT, Sum(WHAUDIT.QUANTITY) AS SumOfQUANTITY
FROM WHAUDIT
WHERE (((WHAUDIT.type)='I11' Or (WHAUDIT.type)=' 11'))
GROUP BY WHAUDIT.Date, Format([Time],'hh'), WHAUDIT.User, WHAUDIT.[ORDER]
HAVING (((WHAUDIT.Date)='$date')) as temp456
GROUP BY temp456.Hour, temp456.User, temp456.[ORDER]) as temp123
GROUP BY temp123.Hour, temp123.User
ORDER BY temp123.Hour DESC;");

     return $query->result();
        $macsdb->close();        
    }

查询本身如下:

SELECT
  temp123.Hour,
  temp123.User,
  Count(temp123.[ORDER]) AS CountOfORDER,
  Sum(temp123.SumOfCountOfPRODUCT) AS SumOfSumOfCountOfPRODUCT,
  Sum(temp123.SumOfSumOfQUANTITY) AS SumOfSumOfSumOfQUANTITY
FROM
  (
    SELECT
      temp456.Hour,
      temp456.User,
      temp456.[ORDER],
      Sum(temp456.CountOfPRODUCT) AS SumOfCountOfPRODUCT,
      Sum(temp456.SumOfQUANTITY) AS SumOfSumOfQUANTITY
    FROM
      (
        SELECT
          WHAUDIT.Date,
          Format([Time], 'hh') AS [Hour],
          WHAUDIT.User,
          WHAUDIT.[ORDER],
          Count(WHAUDIT.PRODUCT) AS CountOfPRODUCT,
          Sum(WHAUDIT.QUANTITY) AS SumOfQUANTITY
        FROM
          WHAUDIT
        WHERE
          (
            (
              (WHAUDIT.type) = 'I11'
              Or (WHAUDIT.type) = ' 11'
            )
          )
        GROUP BY
          WHAUDIT.Date,
          Format([Time], 'hh'),
          WHAUDIT.User,
          WHAUDIT.[ORDER]
        HAVING
          (((WHAUDIT.Date) = '$date')) as temp456
        GROUP BY
          temp456.Hour,
          temp456.User,
          temp456.[ORDER]
      ) as temp123
    GROUP BY
      temp123.Hour,
      temp123.User
    ORDER BY
      temp123.Hour DESC;

我一直在尝试使用echo函数填充表来产生结果,但到目前为止我还没有使它起作用。它似乎是一个查询,在一个查询内,在一个查询内。任何建议将不胜感激。

我尝试用方括号将所有ORDER实例括起来,因为它显然是ORDER的重要组成部分,如果没有它就无法正确读取。我尝试通过验证程序运行它,但是由于括号的原因,这会引发各种问题。我也知道,由于某些原因,它似乎真的不喜欢Time部分的格式。

此查询的目标是能够从Codeigniter视图页面上的结果填充表格。任何建议将不胜感激。

1 个答案:

答案 0 :(得分:0)

Access中的日期值表达式用八叉戟包装,因此:

HAVING (((WHAUDIT.Date)=#$date#)) as temp456

或者,如果是今天的日期:

HAVING (((WHAUDIT.Date)=Date())) as temp456

此外,这里的前导空间看起来很奇怪:

Or (WHAUDIT.type) = ' 11'