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

时间:2011-12-22 18:26:37

标签: php sql-server-2005 ms-access odbc ms-access-2003

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

我们使用Access数据库作为我们的票务系统(我知道),它建于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 个答案:

答案 0 :(得分: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]

您不需要按组排序。我对客户名称有点怀疑并对客户ID感到疑惑。