Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在MySQL解决方案中存储日期范围_Php_Mysql_Database - Fatal编程技术网

Php 在MySQL解决方案中存储日期范围

Php 在MySQL解决方案中存储日期范围,php,mysql,database,Php,Mysql,Database,我的脚本,需要给管理员的能力,插入日期,当他想要一个停车场可用,管理员插入一个范围内的日期工作 我很难找到在MySQL中存储日期的最佳方法 我是否应该使用两列AVAILABLE\u FROM\u DATE和AVAILABLE\u till\u DATE存储日期 PLID AVAILABLE_FROM DATE AVAILABLE_UNTIL_DATE 1 2012-04-01 2012-04-03 1 2012-04

我的脚本,需要给管理员的能力,插入日期,当他想要一个停车场可用,管理员插入一个范围内的日期工作

我很难找到在MySQL中存储日期的最佳方法

我是否应该使用两列
AVAILABLE\u FROM\u DATE
AVAILABLE\u till\u DATE
存储日期

PLID    AVAILABLE_FROM DATE         AVAILABLE_UNTIL_DATE
1       2012-04-01                  2012-04-03
1       2012-04-05                  2012-04-15
2       2012-04-21                  2012-04-30
或者我应该只使用一列
AVAILABLE\u DATE
并将管理员为范围之间的每个日期选择的范围存储在新行中吗

[编辑开始]
我在上文中使用单列的意思不是将日期合并或拆分为一列,而是将日期存储在具有单列的单行中,如下所示:

PLID    AVAILABLE_DATE
1       2012-04-01
1       2012-04-02
1       2012-04-03
依此类推我要存储的所有可用日期。
[编辑完]

基本上,管理员会希望插入一个停车场可用的日期范围,并允许会员选择该时段,如果用户正在寻找该范围内的时段

还是有更好更简单的方法

我目前正在尝试使用第一种方法,对范围使用单独的列,但在查找范围内的停车场时,很难获得所需的结果

[编辑开始]

SELECT * FROM `parking_lot_dates`
WHERE (available_from_date BETWEEN '2012-04-22' AND '2012-04-30'
AND (available_until_date BETWEEN '2012-04-22' AND '2012-04-30'))
我对上面的行使用以下查询,它返回空。 我希望它返回最后一行的PLID2
[编辑完]


提前谢谢。

我个人认为最好有两列,一列是开始时间,一列是结束时间,用于搜索特定日期,或者只是查看它对我来说似乎更容易

关于您对查询的编辑,您的逻辑是完全正确的。您需要比较您正在检查的每个日期是否在从日期到日期的可用日期之间的范围内,如下所示:

SELECT * FROM `parking_lot_dates`
WHERE
(
        '2012-04-22' BETWEEN available_from_date AND available_until_date
    AND '2012-04-30' BETWEEN available_from_date AND available_until_date
)
演示:


编辑:尽管您希望允许部分范围匹配,但您需要两种类型的逻辑,即停车场在4-22到4-27之间可用,并且您需要在4-23到4-28之间可用。您可以将其用于日期4-23至4-27,但不能用于日期4-28。

从数据库的角度来看,使用一列存储这些日期是一种糟糕的设计(未规范化)。最好有两列,因为检索结果更容易,从一列中提取信息意味着必须进行某种拆分。它只是不优雅,而且在需求发生变化时表现不好。

为什么要这么复杂

SELECT *
FROM `parking_lot_dates`
WHERE available_from_date <= '2012-04-22'
AND available_until_date >= '2012-04-30';
选择*
来自“停车场”日期`
如果可用,则从日期开始='2012-04-30';

@Zubair1我修复了错误的情况,以及为什么这不起作用?我没有看到任何变化,但我仍然再次尝试,它没有给我任何结果。可能是因为这是在检查可用的\u from \u date是否等于或大于
2012-04-22
该日期不是我在问题中发布的记录列表中的有效行。@Zubair1对,该日期已更改为oposite条件,从现在应为其在站点上我正在复制/粘贴您的代码,并且不会返回任何内容(MySQL返回了一个空的结果集(即零行))。我以为你的意思是你做了你所指的更改:)但是当我从日期='2012-04-30'开始更改
时,它显示了我想要的结果。谢谢我将尝试你和mellamokb的方法,并获得更多的结果,尽管现在我觉得这两种方法都很可靠:)谢谢你的修复,我有点紧张。我讨厌处理日期和时间,不仅仅是在MYSQL中:)你提供的更新版本确实给了我想要的结果:)我真的很想在发布到sqlfiddle站点的链接时加倍+1,太棒了。但不幸的是,我做不到:(所以在此感谢:)我正在阅读你的编辑,对你的意思有点困惑?你的意思是,如果我有一个范围为4-22到4-27的行,上面的逻辑会起作用吗?如果我尝试得到这个范围,它会起作用,但是如果我想要4-23到4-28,它就不起作用了?如果是这样的话,那么我真的希望它的行为像这样,我的意思是,我只希望它找到一个4-23到4-28的范围,如果表中有一行有这个范围,是的,我也是。我在这里很难做出决定,因为看起来在这种情况下,两栏式的方法会使事情复杂化。你能再详细说明一下吗?为什么我要从单列方法中分离出来?我的想法是,如果所需的范围可用,我只需在行中循环匹配?@Zubair1好吧,只有将起始日期和截止日期存储在一列中(这是您询问是否应该执行的操作),才能将它们存储为带有某种分隔符的字符串。例如:
2012-04-03;2012-04-09
。在这种情况下,
是分隔符,从表中获取此序列时,必须将其拆分为2。就像我说的:这是一个糟糕的设计。这会起作用,但这是一个糟糕的做法。哦,对不起,我似乎有点困惑。但我不会像你提到的那样存储这些值。我打算在每行存储一个日期。例如:第1行<代码>可用日期='2012-04-03'
,然后第2行<代码>可用日期='2012-04-04'和第3行<代码>可用日期='2012-04-05'等等。。但我同意你所说的是一个糟糕的设计,没有规范化,我肯定从来没有想过要这样做。如果我使用这种方法(为每个日期存储一个新行,我很快就会在表中有很多行,这就是这种方法真正困扰我的地方)。只是想发布一下,我还没有接受任何答案的原因是我的问题只解决了一半,我的主要问题仍然没有得到回答。主要的问题是我应该用哪种方式来存储日期<代码>我应该将每个日期存储在单独的行中,还是存储一个带范围的2列行?或者如果有