Поиск в базе данных MySQL на основе диапазона дат, предоставленного пользователем

0

Я новичок в программировании на PHP и MySQL и по-прежнему прокладываю себе путь. Итак, небольшая помощь в этом будет высоко оценена:

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

Id - Event_Name - Event_Date - Event_Charges
---------------------------------------------
1 - Event 1    - 10/10/2010 - $100
2 - Event 2    - 10/31/2010 - $200
3 - Event 3    - 11/12/2010 - $150
4 - Event 4    - 12/01/2010 - $175

Цель состоит в том, чтобы перечислить название событий и суммировать расходы за определенный диапазон дат...

Моя форма внешнего вида выглядит следующим образом:

From Date: ____________
To Date: ______________

Пользователь вводит эти два поля, и я должен перечислить события, входящие в этот диапазон дат, и суммировать их.

Обратите внимание, что поле Event_Date не имеет тип поля "date" в MySQL. Должен ли я иметь поле Event_Date типа поля "date" .

  • 0
    Является ли EventDate строкой?
  • 0
    Пока что да, это строка. Я полагаю, что операции будут проще, если я преобразую их в DATETIME, DATE или TIMESTAMP, как предлагают другие ...
Теги:
date
range

2 ответа

3
Лучший ответ

Чтобы использовать операции с датой, тип данных event_date должен быть одним из следующих:

  • DATETIME
  • DATE
  • TIMESTAMP

После этого вы можете использовать:

  SELECT t.event_name,
         SUM(t.event_charges) AS total_charges
    FROM YOUR_TABLE t
   WHERE t.event_date BETWEEN STR_TO_DATE($from_date, '%Y-%m-%d')
                          AND STR_TO_DATE($to_date, '%Y-%m-%d')
GROUP BY t.event_name

... в котором возникает вопрос о необходимости применения формата даты. Вот почему я привел пример с использованием STR_TO_DATE, поэтому строка из формы HTML преобразуется в тип данных MySQL DATETIME для сравнения.

  • 0
    Спасибо! Это работает как очарование, однако, у меня есть еще один вопрос ... Важно ли использовать функцию STR_TO_DATE, у меня уже есть формат, заботящийся о форме переднего конца с помощью JavaScript ... Большое спасибо!
  • 0
    @Jasdeep Singh: STR_TO_DATE гарантирует, что значение будет преобразовано в значение MySQL DATETIME (при условии, что это значение соответствует указанному формату). Форматы даты не согласованы, поэтому я рекомендую использовать их.
Показать ещё 3 комментария
0

Хорошо, поэтому я немного ударил головой, и вот что я придумал:

SELECT t.event_name,        SUM (t.event_charges) AS total_charges   FROM YOUR_TABLE t  WHERE t.event_date1 BETWEEN STR_TO_DATE ($ from_date, '% Y-% m-% d')                         И STR_TO_DATE ($ to_date, '% Y-% m-% d') ИЛИ t.event_date2 BETWEEN STR_TO_DATE ($ from_date, '% Y-% m-% d')                         И STR_TO_DATE ($ to_date, '% Y-% m-% d') GROUP BY t.event_name

Это работает как прелесть моего отчета! Большое спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню