Извлекать данные еженедельно

#php #html #mysql #sql #database

#php #HTML #mysql #sql #База данных

Вопрос:

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

Каждую неделю я хочу отображать общую сумму, уплаченную клиентом.Итак, я хочу еженедельно проверять деньги для каждого клиента.

 Customer  |   Date      |Money|
----------------------------------------------------------------------
Jhon        2014-07-01    22
Ammy        2014-07-02    25
Jhon        2014-07-03    21
Josh        2014-07-04    28
Josh        2014-07-05    30
Ammy        2014-07-06    211
Jhon        2014-07-07    217
  

Спасибо…

Комментарии:

1. Также добавьте свой код, в котором вы что-то пробовали

2. По сути, вы ограничиваете строки специальной недели с помощью a WHERE clause и функций даты и времени MySQL. Затем вы группируете по имени клиента и SUM суммируете деньги.

3. Я пробовал этот запрос для извлечения данных каждый месяц, где $ id — это значение из текстового поля, в котором выбирается Клиент, МЕСЯЦ (дата), СУММА (деньги) в качестве TotalPaid, ОТ Customer, Где MONTH (Date) = {$id} GROUP BY Customer»; но что мне нужно, так это то, что каждые недели проходит, я хочу, чтобы запрос отображал, хочу отображать общую сумму, уплаченную клиентом.

4. Вы должны определить начало и конец недели, чтобы можно было написать надежный запрос, который возвращает правильные данные.

Ответ №1:

вы можете сделать это с помощью GROUP BY и WEEK функции:

 SELECT customer, WEEK(date) AS week, SUM(money) AS total
FROM table
GROUP BY customer, WEEK(date);
  

Вот sqlfiddle: http://sqlfiddle.com /#!2/f0754f/1


Если вы хотите получить их только за текущую неделю, вы можете добавить WHERE предложение:

 SELECT customer, WEEK(date) AS week, SUM(money) AS total
FROM table
WHERE WEEK(date) = WEEK(NOW())
GROUP BY customer, WEEK(date);
  

Ответ №2:

Ваш SQL запрос должен быть таким:

Обновить

 SELECT Customer, sum(Money) as TotalMoney from MoneyTable 
WHERE `Date` BETWEEN DATE_ADD(NOW(), interval -1 WEEK) and NOW() group by Customer
  

Создайте PHP-скрипт и запускайте этот запрос каждую неделю и делайте с данными все, что вам нравится.

Теперь вопрос в том, как запускать его каждую неделю?

Если вы используете Linux, вы можете воспользоваться cron сервисом. Настройте это следующим образом:

 5 8 * * 6 php /my/script/location/script.php
  

Если вы используете Windows, попробуйте планировщик и запустите свой скрипт через bat файл или что-то еще.

Надеюсь, это натолкнет вас на мысль. удачи!

Комментарии:

1. Я пробовал этот запрос для извлечения данных каждый месяц, где $ id — это значение из текстового поля, в котором выбирается Клиент, МЕСЯЦ (дата), СУММА (деньги) в качестве TotalPaid, ОТ Customer, Где MONTH (Date) = {$id} GROUP BY Customer»; но что мне нужно, так это то, что каждые недели проходит, я хочу, чтобы запрос отображал, хочу отображать общую сумму, уплаченную клиентом.

2. @lodev09: Вам также следует добавить столбец customer.

3. почему запрос должен быть ограничен указанным временем? Ваш ответ был верен, если задание CRON выполняло скрипт постоянно, поминутно, но, когда задание CRON выполняет еженедельное выполнение, простого запроса было бы достаточно…

4. @MostafaTalebi Этот ответ намного лучше вашего. Возможно, не по расписанию.

5. @MostafaTalebi Этого будет недостаточно, потому что он получит все остальные деньги с предыдущих дат.

Ответ №3:

Ваш вопрос неясен…Я полагаю, вы хотите получить данные за одну неделю

 SELECT sum(Money) as TotalPaid FROM yourtable
WHERE Date between date_sub(now(),INTERVAL 1 WEEK) and now();
  

Если вам нужно получить две недели, используйте что-то вроде этого

  SELECT 'last week' AS week, COUNT(*) AS rows 
FROM table_name
WHERE date_logged >= CURDATE() - INTERVAL  6 DAY 
  AND date_logged  < CURDATE()   INTERVAL  1 DAY
UNION ALL
SELECT 'previous week' AS week, COUNT(*) AS rows 
FROM table_name 
WHERE date_logged >= CURDATE() - INTERVAL 13 DAY
  AND date_logged  < CURDATE() - INTERVAL  6 DAY ;
  

Комментарии:

1. Я пробовал этот запрос для извлечения данных каждый месяц, где $ id — это значение из текстового поля, в котором выбирается Клиент, МЕСЯЦ (дата), СУММА (деньги) в качестве TotalPaid, ОТ Customer, Где MONTH (Date) = {$id} GROUP BY Customer»; но что мне нужно, так это то, что каждые недели проходит, я хочу, чтобы запрос отображал, хочу отображать общую сумму, уплаченную клиентом.