MySQL запрос, чтобы получить не-данные для неназначенных дат - PullRequest
0 голосов
/ 14 июля 2009

У меня есть таблица с недельными данными, которая выглядит так:

userID       Site             date
------      ------           ------
Smith    Ferris Wheel       2009-07-13
Jones   Outerspaceland      2009-07-13
LChar   Ferris Wheel       2009-07-14
Smith     Underworld        2009-07-16
Jones     Fish Bowl         2009-07-17
Munson    Go-Go Tech        2009-07-16

В настоящее время у меня есть PHP-скрипт, который сначала получает диапазон дат (понедельник - пятница), а затем выполняет запрос для каждого userID для этого диапазона дат. Затем я перебираю результаты и проверяю пробелы между датами. Если есть пробел, он выводит дату, и сайт указывается как «Оставайтесь дома». Он должен учитывать несколько дней подряд (например, если пользователь размещен только в понедельник и пятницу той недели), и он должен сделать дополнительный шаг в конце каждой недели, чтобы убедиться, что если пользователь остается дома после Среда (таким образом, четверг и пятница заполняются как пробелы). Таким образом, необходимо выполнить три проверки: одну для пользователей, не начинающих работу в понедельник, одну для разрывов между днями и одну для пользователей, заканчивающихся до пятницы ... плюс для любой из этих ситуаций приходится учитывать дни подряд.

Сценарий в основном создает массив диапазона дат для проверки, и он прекрасно работал в течение нескольких месяцев. ОДНАКО

Мне было интересно, есть ли функция MySQL для возврата выходных для каждого пользователя? Чтобы я мог указать в запросе «Оставайся дома» и не запускать прикольный сценарий, который вечно объясняет другим людям, работающим со мной над моим сценарием?

Спасибо!

1 Ответ

0 голосов
/ 14 июля 2009

Легко! Переверните запрос!

То есть:

  1. Создание справочной таблицы с днями недели
  2. Сформировать запрос, который выполняет LEFT_OUTER_JOIN для таблицы поиска и таблицы DAYNAME (поле). То есть он вернет все строки из таблицы поиска и только те, которые соответствуют вашей таблице ,,,

Я не уверен, хотите ли вы фильтровать по человеку ... критерии будут выглядеть так: userid = 'person' или userid равен null

Полученные данные будут выглядеть ...

  1. ряд на все дни
  2. В строке идентификаторы пользователей будут существовать для не пустых дней и будут равны нулю в течение пропущенных дней
...