我有一个挑战,我希望所有特定日期(例如星期一)的所有开始和结束时期都在特定日期范围内,并将它们放在单独的行中 该表如下所示:
+----+---------+------------+------------+
| id | id_room | start_ts | end_ts |
| 3 | 3 | 1445032800 | 1445378400 |
| 4 | 3 | 1445551200 | 1446073200 |
| 5 | 3 | 1446246000 | 1446591600 |
| 6 | 3 | 1446850800 | 1447196400 |
| 7 | 3 | 1447455600 | 1447801200 |
| 8 | 3 | 1448060400 | 1448406000 |
| 9 | 2 | 1445475600 | 1445572800 |
| 10 | 1 | 1445378400 | 1445464800 |
| 11 | 3 | 1445032800 | 1445378400 |
+----+---------+------------+------------+
我设法通过几种不同的方式获得开始和结束时期:
$start = strtotime('2016-06-01');
$end = strtotime('2016-06-30');
$mondays_start=array();
while( $start <= $end ) {
if ( date('N',$start)== 1 )
$mondays_start[]=$start+43200;
$start += 86400;
}
$start = strtotime('2016-06-01');
$end = strtotime('2016-06-30');
$mondays_end=array();
while( $start <= $end ) {
if ( date('N',$start)== 1 )
$mondays_end[]=$start+64800;
$start += 86400;
}
但当我试图将它们放入我的 table 时,我真正的问题就出现了。我想我可以将数组分解成不同的变量,并根据它进行单独的查询,但它似乎不是很有效。
我在这里尝试了一些解决方案 Is it bad to put a MySQL query in a PHP loop?但无法让它工作。
我也像这样在for循环中试过
$start = strtotime('2016-06-01');
$end = strtotime('2016-06-30');
for ($start; $start < $end; $start+604800) {
$mondays .= "INSERT INTO `#__room_closure`(`id_room`,`start_ts`,`end_ts`) VALUES( ".
$args['id_room'].",".$start.",".$start+21600.");";
}
但这也不起作用。
期待您对此事的看法。
最佳答案
我创建了一种回答问题的方法,但它创建了一个新方法。
答案如下:
for ($args["start_ts"]; $args["start_ts"] < $args["end_ts"]; $args["start_ts"]+=604800) {
$mondays .= "INSERT INTO `#__room_closure`(`id_room`,`start_ts`,`end_ts`) VALUES( ".
$args['id_room'].",".$args["start_ts"].",".($args["start_ts"]+21600).");";
};
这将创建一个数组,其中包含字符串中的多个不同查询:
"INSERT INTO `#__room_closure`(`id_room`,`start_ts`,`end_ts`) VALUES( 1,1306900800,1306922400);INSERT INTO `#__room_closure`(`id_room`,`start_ts`,`end_ts`) VALUES( 1,1307505600,1307527200);INSERT INTO `#__room_closure`(`id_room`,`start_ts`,`end_ts`) VALUES( 1,1308110400,1308132000);INSERT INTO `#__room_closure`(`id_room`,`start_ts`,`end_ts`) VALUES( 1,1308715200,1308736800);INSERT INTO `#__room_closure`(`id_room`,`start_ts`,`end_ts`) VALUES( 1,1309320000,1309341600);"
这解决了我的问题。
然而,对于 joomla,我不能在 Query() 函数中放置多个查询。但那是另一回事了,应该下次再讲。
关于PHP Mysql查询获取特定日期范围内所有星期一的时间范围并将这些不同的开始和结束时间放入数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33231707/