SQL 2005 связанный расширенный подзапрос БД Access 2003 с использованием PHP - PullRequest
1 голос
/ 22 декабря 2011

Днем и ночью я искал синтаксис для подзапросов, и мне все еще кажется, что они в неведении.Кроме того, мне кажется, что мне может потребоваться более сложный подзапрос для завершения этого.Я постараюсь объяснить это в меру своих возможностей.

Мы используем базу данных 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 Ответ

1 голос
/ 23 декабря 2011

Как насчет:

   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]

Вам не нужно заказывать с группой по. Я немного подозреваю имя клиента и удивляюсь его идентификатору.

...