2013-09-12 7 views
-1

У меня есть веб-форма, пользователь вводит две даты (ГГГГ/ММ/ДД), представляющие интервал и другую информацию об активности в день.запись строки для каждого дня. mySQL

Пример: он выбрать 2013/09/12 2013/10/02 к деятельности: Плавание

в этом случае моя таблица будет выглядеть следующим образом:

date  | activity 
2013/09/12 | swimming 
2013/09/13 | swimming 
2013/09/14 | swimming 
2013/09/15 | swimming 
2013/09/16 | swimming 

и так далее ....

я написать строку с активностью на каждый день даты inveral предоставленного пользователем

я могу сделать это без перебора дней вручную? Я использую PHP + Mysqli

EDIT: я не могу использовать две колонки для начальной и конечной даты

+0

Как вы храните данные в своей базе данных? – Naruto

+0

Непонятно, что вы спрашиваете ... Вы хотите получить данные или спросить о схеме таблиц? – hallaji

+0

нет, я должен записывать данные в DB . Моя таблица выглядит как таковая в моей axample плюс автоматически сгенерированный числовой идентификатор и поле anothe с дополнительной информацией. Как я уже сказал, пользователь предоставляет две даты, представляющие начало и конец периода, и активность через веб-форму. –

ответ

2

Я думаю, что это лучше сделать два столбца (например start_day & END_DAY).

Если не удается изменить конструкцию DB, вы можете попробовать это:

PHP:

$last_date = $start_date; 
$ready = false; 
while ($ready === false) { 
    $last_date = date('Y-m-d', strtotime($last_date . ' + 1 day'));+ 

    // add $last_date to your mysql table here 

    if ($last_date == $stop_date) { 
     $ready = true; 
    } 
} 

Это непроверенный, но я надеюсь, что он работает;)

+0

К сожалению, у меня недостаточно репутации, чтобы сделать это:/ – Wikunia

+0

к сожалению, я не могу использовать два столбца. база данных уже существует, и я не могу ее изменить –

+1

спасибо, что сработало !! : D –

0

Используйте 2 различных столбцов даты в вашем столе; один для даты начала и один для даты окончания, вы можете затем добавить начальную и конечную даты деятельности к каждому из них соответственно.

+0

к сожалению, я не могу использовать две колонки. база данных уже существует, и я не могу ее изменить –

+0

@JacopoGrassi Думаю, вы могли бы использовать текущий столбец 'date' в качестве строки и хранить диапазон дат в этом столбце?Например: '2013/09/12-2013/10/02'. – Grimthorr

+0

не очень ... поле это поле DATE, поэтому я не могу сохранить в нем строку. кроме этого есть другие приложения, которые используют эту БД, я не могу редактировать поля и переписывать все другие приложения для использования новой таблицы. –

-1

я могу дать вам подсказку, если Вы можете использовать процедуры:

DELIMITER $$ 

DROP PROCEDURE IF EXISTS `dowhile_thing`$$ 

CREATE DEFINER=`root`@`localhost` PROCEDURE `dowhile_thing`(dt_start DATE,dt_stop DATE, thing CHAR(20)) 
BEGIN 
    DECLARE v1 INT DEFAULT 0; 
CREATE TEMPORARY TABLE tmp (
    `day_name` VARCHAR(256) DEFAULT NULL, 
    `date_change` DATE DEFAULT NULL, 
    thing CHAR(20) 
) ENGINE=MYISAM DEFAULT CHARSET=utf8 ; 


    SELECT TIMESTAMPDIFF(DAY, dt_start, dt_stop)+1 INTO v1; 
    WHILE v1 > -1 DO 
    INSERT tmp (SELECT DAYNAME(ADDDATE(dt_start, INTERVAL v1 DAY)),ADDDATE(dt_start, INTERVAL v1 DAY),thing); 
    SET v1 = v1 - 1; 
    END WHILE; 

SELECT * FROM tmp; 
DROP TEMPORARY TABLE IF EXISTS tmp; 

    END$$ 

DELIMITER ; 

, а затем вызвать:

CALL dowhile_thing('2013-06-10','2013-06-14','swim'); 

результат:

day_name | date_change | вещь

Суббота | 2013-06-15 | плавание

Пятница | 2013-06-14 | плавание

...

Смежные вопросы