Вставьте 52 недели для каждого года в MySQL (PHP скрипт) - PullRequest
0 голосов
/ 21 августа 2010

Я хочу в таблицу с именем week_year со следующей схемой:

Week_year = {id, week, year}

Вставить недели для каждого года, чтобы в 2001 году была неделя 1, неделя 2, неделя 3,…, неделя 52, а затем начать с 2002 года до 2009 года.

Я пробовал разные PHP-скрипты, но не могу понять, что это правильно. Я пробовал разные таблицы, по одному на год, а другой на неделю, а затем давал каждую неделю год_ид, но это не показалось эффективным.

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

Добавлена ​​дополнительная информация, опубликованная как ответ

Я пробовал этот код, который представляет собой бесконечный цикл года:

<?php

$year = 2001;
$week_start = 1;
$week_end = 52;

for ( $week_start = 1; $week_start <= 52; $week_start++ ) {

echo $week_start;
echo "<br />";
    for ($week_start = 1; $week_start <= 52; $year++) {
        echo $year;
        echo "<br />";
    }
}
?>

Ответы [ 3 ]

3 голосов
/ 21 августа 2010

Делайте это в SQL, а не в PHP:

create table artificial_range( int id not null auto_increment, ci int);

insert into artificial_range(c1) values (1);

- СЕЙЧАС ДВОЙНОЙ РАЗМЕР искусственного_страна

insert into artificial_range(c1) select c1 from artificial_range;

- повторите вышеуказанную вставку еще пять раз; - теперь у вас есть 64 строки в искусственном_ранжере

-- now insert into week_year:
insert into week_year(week, year)
select a.id, b.id + 2000
from 
  artificial_range a,
  artificial_range b 
where a.id < 53 and b.id < 10;


-- or even better, just make week_year a view:
create view week_year as
select a.id as week, b.id + 2000 as year
from 
  artificial_range a,
  artificial_range b 
where a.id < 53 and b.id < 10;

Одна оговорка: в зависимости от того, что вы подразумеваете под «неделей», в некоторых годах 53 недели.

2 голосов
/ 21 августа 2010
$id_start = 1;
for ($year=2002; $year<=2009; $year++) {
   $values = array();
   for ($week=1; $week<=52; $week++) {
      $values[] = implode(',', array($id_start++, $week, $year));
   }
   $query = 'INSERT INTO `week_year` (id, week, year) ' 
          . 'VALUES (' . implode('),(', $values) . ')';

   $db->query($query);
}

** ПРИМЕЧАНИЕ ** проверьте функцию localtime () PHP. Вам не нужно иметь таблицу с неделей / годом, просто отметку времени и использовать эту отметку с $info = localtime($row->timestamp, true) и набрать $weekNumber = floor($info['tm_yday'] / 7);, чтобы получить номер недели. Просто мысль.

0 голосов
/ 21 августа 2010

просто вызовите хранимый процесс populate_year_week (2001,2009) из вашего php-скрипта!

drop table if exists year_week;

create table year_week
(
year_id smallint unsigned not null,
week_id tinyint unsigned not null,
primary key (year_id, week_id)
);

delimiter ;

drop procedure if exists populate_year_week;

delimiter #

create procedure populate_year_week
(
in from_yr smallint unsigned,
in to_yr smallint unsigned
)
proc_main:begin

declare yr smallint unsigned default 0;
declare wk tinyint unsigned default 0;

  truncate table year_week;

  -- put some validation here !
  if to_yr < from_yr then
        leave proc_main;
    end if;

  -- create years and weeks...
  set yr = from_yr;
    while yr <= to_yr do

    set wk = 1;
    while wk < 53 do
      insert into year_week (year_id, week_id) values (yr,wk);    
      set wk=wk+1;
    end while;

    set yr=yr+1;
  end while;

end proc_main #

delimiter ;

call populate_year_week(2001,2009);

select * from year_week order by year_id, week_id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...