繁体   English   中英

使用php pdo为一年中的每个日期添加一行

[英]Add a row for each date in year with php pdo

我需要为我的数据添加365/366行,以便为某年(etc.2014)中的每个日期添加...

我有:

//something like for each date in this year add row with data...
     $STH1 = $db->prepare("INSERT INTO workhours (ID_radnika,ime,datum,user_id) values ($orderID,:1,HOW TO FOREACH DATE,:2)");  
          $STH1->bindParam(':1', $_POST['ime']);
          $STH1->bindParam(':2', $user_id);

          $STH1->execute();

所以这是我的一个简单查询。 现在,我需要知道的数据(ID_radnika,ime,user_id)添加365行,但仅用于更改基准(日期)

最好的方法是什么?

尝试这个

CREATE PROCEDURE `sp_test`(IN id INT, In ime VARchar(20),In userid INT)
BEGIN
DECLARE start_date DATE default '2020-06-16';
DECLARE end_date DATE default '2021-06-16';
DECLARE DiffDate int default 1;
SELECT DATEDIFF(end_date,start_date) AS DiffDate
into DiffDate;
while DiffDate>0 do
  INSERT INTO workhours(ID_radnika,ime,datum,user_id)
  values (id,ime,start_date,userid);
    select  DATE_ADD(start_date, INTERVAL 1 DAY)
    into start_date;
    SELECT DATEDIFF(end_date,start_date) AS DiffDate
    into DiffDate;
end while;
END

添加另一个参数:

$STH1 = $db->prepare("INSERT INTO workhours (ID_radnika,ime,datum,user_id) values ($orderID,:ime,:date,:uid)");

使用更改的参数执行:

    $max_days = ((((($year%4)==0)&&((($year%100)!=0)||(($year%400)==0))))?366:365);
    $startOfYear = strtotime(date('Y-01-01 0:00:00'));
    for ($i = 0; $i < $max_days; $i++) {
        $STH1->execute(array(
            ':ime' => $_POST['ime'],
            ':uid' => $user_id,
            ':date' => $startOfYear + $i*86400,
   ));

如果愿意,您可以使用一个查询来完成。 然后,您需要执行以下操作:

$values      = array();
$startOfYear = strtotime(date('Y-01-01 0:00:00'));
$max_days = ((((($year%4)==0)&&((($year%100)!=0)||(($year%400)==0))))?366:365);
for ($i = 0; $i < $max_days; $i++) {
    $values[] = "($orderID, :ime, ".($startOfYear + $i * 86400).", :uid)";
}
$stm = $db->prepare("INSERT INTO workhours (ID_radnika,ime,datum,user_id) values ".implode(',', $values));
$stm->execute(array(':ime' => $_POST['ime'], ':uid' => $user_id));

您可以按照以下说明在MySQL中使用WHILEhttp : //dev.mysql.com/doc/refman/5.7/en/while.html

DECLARE v INT DEFAULT 365;
WHILE v > 0 DO
    ... insert to ...
    SET v = v - 1;
END WHILE;

您也可以在手册中找到所需的日期处理功能: http : //dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html

您需要的是: MAKEDATE(year, dayofyear)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM