php 过滤mysql,PHP时间过滤和MYSQL过滤

我有3列:Day,start_schedule和end_schedule.

Day | start_schedule | end_schedule

-------|-----------------|--------------

Monday | 1:00 | 3:00

Monday | 6:00 | 8:00

Monday | 8:00 | 10:00

我还在学习php.根据数据库中存储的时间,如何过滤输入的开始时间表和结束时间表是否有效?

例如,如果我想增加时间

>开始时间表= 3:00和结束时间表= 7:00

由于是6:00-8:00,因此您不可以添加此时间表.

>开始时间表= 7:00和结束时间表= 11:00

由于存在6:00-8:00和8:00-10:00,因此您不可以添加此时间表.

解决方法:

我会在mysql中执行大多数逻辑,因为它可以非常简单,直接地处理这类表达式.

在PHP中,在插入新条目之前,我们需要检查1件事:

> end_time是否小于start_time?如果是这样,请中止.

在MySQL中,尝试插入新条目时,我们需要检查4件事:

> start_time是否在任何现有条目中?如果是这样,请中止.

> end_time是否在任何现有条目中?如果是这样,请中止.

>在我们的新条目中是否有任何开始的条目?如果是这样,请中止.

>在我们的新条目中是否有任何条目结尾?如果是这样,请中止.

上面的内容实际上可以重构为一个步骤:

>我们的开始时间是否少于任何条目的结束时间,并且我们的结束时间是否大于整个开始时间?如果是这样,请中止.

mysql> describe sample;

+-------+-------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+-------------+------+-----+---------+-------+

| start | time | YES | | NULL | |

| end | time | YES | | NULL | |

| day | varchar(50) | YES | | Monday | |

+-------+-------------+------+-----+---------+-------+

mysql> SELECT * FROM sample;

+--------+----------+----------+

| day | start | end |

+--------+----------+----------+

| Monday | 01:00:00 | 03:00:00 |

| Monday | 06:00:00 | 08:00:00 |

| Monday | 08:00:00 | 11:00:00 |

+--------+----------+----------+

PHP查询数据库的示例实现:

支持@ regilero,以发布需要的子句的重构版本.

$new_entries = array (

array('Monday', '00:00:00', '23:59:00'),

array('Monday', '12:00:00', '15:00:00'),

array('Monday', '07:00:00', '10:00:00')

);

foreach ($new_entries as $new) {

list ($day, $start, $end) = $new;

$q_day = "'$day'";

$q_end = "'$end'";

$q_start = "'$start'";

$sql = <<

INSERT INTO `sample` (day,start,end)

SELECT $q_day, $q_start, $q_end FROM DUAL

WHERE NOT EXISTS (

SELECT * FROM `sample`

WHERE day = $q_day AND (

$q_start < end AND $q_end > start

)

)

EOQ;

mysql_query ($sql) or die (mysql_error ());

if (mysql_affected_rows () == 0)

print join (' ', $new) . " was not inserted!\n";

else

print join (' ', $new) . " was inserted!\n";

}

这将输出:

Monday 00:00:00 23:59:00 was not inserted!

Monday 12:00:00 15:00:00 was inserted!

Monday 07:00:00 10:00:00 was not inserted!

标签:filter,mysql,php,time,filtering

来源: https://codeday.me/bug/20191101/1987165.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值