SQL 2005 使用 PHP 链接 Access 2003 DB 高级子查询

Posted

技术标签:

【中文标题】SQL 2005 使用 PHP 链接 Access 2003 DB 高级子查询【英文标题】:SQL 2005 linked Access 2003 DB advanced subquery using PHP 【发布时间】:2011-12-22 18:26:37 【问题描述】:

我日夜搜索子查询的语法,但我似乎仍然对它们一无所知。最重要的是,似乎我可能需要更多高级子查询来完成此操作。我会尽力解释这一点。

我们的票务系统(我知道)使用 Access DB,它建于 1997 年。它使用 SQL Server 2005 作为后端。我目前正在用 php 编写一个脚本,以在客户提前购买的阻塞时间降至零以下时向他们发送电子邮件。凭借我对 SQL 和 ODBC 的一点编码经验,我能够创建几个现在可以使用的查询。我需要向这些查询中添加更多数据,但我已经达到了我的极限。

此查询将提取所有与我们有预付时间的不同客户(阻止时间/事件代码 201)

$query1 = "SELECT [Customer Name], MAX([Incident #])
           FROM [Incidents]
           WHERE [Event Code] = 201
           GROUP BY [Customer Name]
           ORDER BY [Customer Name] ASC";

由于我对子查询的了解有限,我有另一个查询必须查找是否有更新的“事件 #”,其“事件代码”为 203。如果是,请不要包含它们。

while( odbc_fetch_row( $query1 ))

   $query2 = "SELECT [Customer Name]
              FROM [Incidents]
              WHERE [Customer Name] = '$customer_name'
              AND [Incident #] > $incident_num
              AND [Event Code] = 203";

   if( !odbc_fetch_row( $query2 )) 
      //list customers
   

这些查询就像一个魅力,但我想将它们合并为一个,并在外部查询中包含“开始日期”和“使用时间”列,以便我也可以访问该数据。

【问题讨论】:

【参考方案1】:

怎么样:

   SELECT [Customer Name], MAX([Incident #])
   FROM [Incidents] a
   WHERE [Event Code] = 201
   AND  [Customer Name] Not IN 
      (SELECT [Customer Name]
      FROM [Incidents] b
      WHERE b.[Customer Name] = a.[Customer Name]
      AND b.[Incident #] > a.[Incident #]
      AND [Event Code] = 203)
   GROUP BY [Customer Name]

您不需要 order by 和 group by。我有点怀疑客户名称,想知道客户 ID。

【讨论】:

谢谢你,这很有效......我想我离得不远了,呵呵。

以上是关于SQL 2005 使用 PHP 链接 Access 2003 DB 高级子查询的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 2005 查询多个Access 数据库?

Access 2000 连接到 SQL Server 2005

使用 MS Access 2003 连接到 SQL Server 2005

从 Access 2000 访问 SQL Server 2005 的一般网络错误

php 链接access数据库

使用 SSMA 将 Access 2007 数据库应用程序迁移到 SQL Server 2005 - 问题