Изменение запроса SQL для исключения определенных дат - PullRequest
1 голос
/ 11 октября 2009

У меня довольно длинный SQL-запрос, который я использую для того, чтобы для всех пользователей в определенном «регионе» в течение определенного месяца вычислить количество дней, которые они находились «на службе». Это разбито на выходные и будни. Вот оператор php / SQL:

 $result = mysql_query("

 SELECT fname, lname, MONTH( eventDate ) AS MONTH , 
    SUM( IF( WEEKDAY( eventDate ) <=2, 1, 0 ) 
       OR IF( WEEKDAY( eventDate ) = 6, 1, 0 )) AS WeekdayCount, 
    SUM( IF( WEEKDAY( eventDate ) = 4, 1, 0 ) 
       OR IF( WEEKDAY( eventDate ) = 5, 1, 0 ) 
       OR IF( WEEKDAY( eventDate ) = 3, 1, 0 )) AS WeekendCount, 
    SUM( IF( secondary =0, 1, 0 ) ) AS `Primary`, 
    SUM( IF( secondary =1, 1, 0 ) ) AS `Secondary` 
 FROM eventcal AS e 
 LEFT JOIN users AS u ON e.primary = u.username 
 WHERE e.region = '$region' AND MONTH( eventDate ) = '$month' 
 GROUP BY fname, lname, MONTH( eventDate ) 
 ORDER BY lname

");

К сожалению, для разных регионов разные дни недели считаются выходными и буднями - как вы можете видеть выше. Поэтому воскресенье не может считаться выходным. Но это не важно здесь.

Моя проблема в том, что я хочу сказать: «Не включайте в подсчет какие-либо дни с 10 октября 2009 г. по 13 октября 2009 г.

Кто-нибудь знает, как я могу изменить этот SQL, чтобы сказать это? Или я могу написать небольшой PHP-скрипт?

Спасибо!

1 Ответ

3 голосов
/ 11 октября 2009

Вы можете добавить предложение where (непосредственно перед GROUP BY)

AND eventDate NOT BETWEEN '2009-10-10' AND '2009-10-13'

ПРИМЕЧАНИЕ: оператор Между может функционировать по-разному в зависимости от базы данных - он может быть включающим или исключающим, то есть он может включать или исключать результаты, которые попадают точно в начало или конец диапазона, поэтому альтернативно:

AND (eventDate<'2009-10-10' OR eventDate>'2009-10-13')

Также обратите внимание, что дата в SQL-запросе в виде простого текста обрабатывается по-разному в разных базах данных, поэтому прочитайте документацию вашей базы данных. вышеописанное будет работать для postgres.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...