Как получить недельную запись в MySQL от начала до конца - PullRequest
0 голосов
/ 14 февраля 2012

У меня есть таблица с именем weight, а поля: ID, WEIGHT, CREATED ON. У меня также есть START дата и END дата в переменных PHP. Теперь я хочу получить недельную запись от начальной до конечной даты.
Результат должен быть таким:

WEEK | WEIGHT | CREATED ON
-----+--------+-----------
1    |   50   | 2012-02-01
1    |   50   | 2012-02-03
1    |   50   | 2012-02-05
1    |   50   | 2012-02-07
2    |   50   | 2012-02-08
2    |   50   | 2012-02-10
2    |   50   | 2012-02-14
3    |   50   | 2012-02-15
3    |   50   | 2012-02-17
3    |   50   | 2012-02-17

Как этого добиться?

Ответы [ 5 ]

4 голосов
/ 14 февраля 2012

Надеюсь, это поможет

SELECT ID, weigth, created_on, WEEK(created_on) week
FROM weight
WHERE created_on BETWEEN start_date AND end_date
ORDER BY week
1 голос
/ 14 февраля 2012

Попробуйте ниже

SELECT WEEKDAY(CREATED_ON) AS week, weight, created_on
FROM weight
WHERE CREATED_on BETWEEN start_date AND end_date
ORDER BY week

Это должно дать вам то, что вы хотите ...

Обновление 1

SELECT (SELECT COUNT(*) FROM myTable u2 
WHERE 
u2.date > u1.date) + 1 AS week, date FROM myTable u1
WHERE date between start_date AND end_date
ORDER BY week

Обновление 2

Вниже запроса, дата - это дата, которая у меня есть.

SELECT  (WEEK(date, 5) -
    WEEK(DATE_SUB(date, INTERVAL DAYOFMONTH(date) - 1 DAY), 5) + 1) as week, date
FROM myTable
WHERE date BETWEEN start_date AND end_date
ORDER BY week

Обновление 3

Предположим, у меня есть

myDate
+++++++++++++++++++++
2012-02-01 12:12:12
2012-02-01 12:12:12
2012-02-01 12:12:12
2012-02-03 12:12:12
2012-02-05 12:12:12
2012-02-07 12:12:12
2012-02-08 12:12:12
2012-02-08 12:12:12
2012-02-10 12:12:12
2012-02-14 12:12:12
2012-02-15 12:12:12
2012-02-17 12:12:12
2012-02-17 12:12:12
2012-03-01 12:12:12
2012-03-03 12:12:12
2012-03-05 12:12:12
2012-03-07 12:12:12

А ниже - то, что я хочу.

week |myDate
+++++++++++++++++++++++++++
  1  |2012-03-07 12:12:12
  2  |2012-03-05 12:12:12
  3  |2012-03-03 12:12:12
  4  |2012-03-01 12:12:12
  5  |2012-02-17 12:12:12
  5  |2012-02-17 12:12:12
  6  |2012-02-15 12:12:12
  7  |2012-02-14 12:12:12
  8  |2012-02-10 12:12:12
  9  |2012-02-08 12:12:12
  9  |2012-02-08 12:12:12
  10 |2012-02-07 12:12:12
  11 |2012-02-05 12:12:12
  12 |2012-02-03 12:12:12
  13 |2012-02-01 12:12:12
  13 |2012-02-01 12:12:12
  13 |2012-02-01 12:12:12

Чтобы получить выше, см. Ниже запрос ...

SELECT (SELECT COUNT(distinct u2.myDate) FROM myTable u2
WHERE 
u2.myDate > u1.myDate) + 1 AS week, myDate FROM myTable u1
WHERE 1=1
ordeR BY week

В вашем случае WHERE предложение будет WHERE myDate between startDate AND endDate

Надеюсь, это то, что вы хотите... Наконец !!!

Удачи !!!

1 голос
/ 14 февраля 2012

попробуйте это ...

SELECT WEEKDAY(CREATED_ON)AS weekdays,weight,CREATED_ON
FROM weight
WHERE CREATED_on BETWEEN start_date AND end_date
GROUP BY weekdays 
1 голос
/ 14 февраля 2012

Если у вас уже есть даты начала и окончания, хранящиеся в переменных PHP, вы можете использовать ключевое слово MySQL BETWEEN для выполнения запроса SELECT к таблице, таким образом (код PHP):

$query = "SELECT FROM weight WHERE `created on` BETWEEN '" . $start_date . "' AND '" . $end_date . "'";

Я включил строковые кавычки (') выше, так как я предполагаю, что вы сохранили свои переменные в виде строк PHP, отформатированных как дата-время, т.е. ГГГГ-ММ-ДД ЧЧ: ММ: СС, используя формат date(): "Y-m-d H:i:s".

Подробнее: http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#operator_between

0 голосов
/ 14 февраля 2012

Рассчитайте разницу (в целых днях) между датой НАЧАЛА и датой СОЗДАНИЯ, разделите на 7 и добавьте 1 - что-то вроде этого:

SELECT
  DATEDIFF(CREATED_ON, START) / 7 + 1,
  WEIGHT,
  CREATED_ON
FROM
  weight
ORDER BY
  CREATED_ON
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...