选择大于当前日期的日期

时间:2013-11-13 00:19:36

标签: php mysql

我有一个MySQL数据库表,其中一个单元格包含多个日期,我想要选择包含一个或多个日期大于今天日期的单元格的所有行,这可能吗? (使用PHP)

4 个答案:

答案 0 :(得分:2)

不确定

select * from MyTable where MyDate > Now()

您的单个​​字段如何包含多个日期?也许你应该为此考虑一个单独的表。

答案 1 :(得分:1)

如果字段是DATEDATETIME,您可以使用

SELECT * FROM table WHERE datefield > NOW()

答案 2 :(得分:1)

“单个单元格包含多个日期”..是问题的症结所在。这有三个选项。

规范化/修复架构

从充分规范化的架构开始 - 特别是,任何列/“单元格”最多可以包含一个日期(或一条信息)。这可能需要也可能不需要根据信息的作用引入另一个表格。

这种方法具有可扩展性,可在RDMBS / RA设计中使用,如果完成,其他查询将“正常工作”。

(这是迄今为止最好的选择,如果可能的话应该完成。适当的规范化也应该指导进一步的模式开发,以便在将来缓解这些问题。)

创建规范化视图

创建可以JOIN ed的非规范化表(或这样的正常化查询)的规范化视图。然后使用一个各种建议的答案(适用于规范化的模式)..尽管处于无法利用索引的极端劣势。

这非常混乱,但可以做到。有关示例,请参阅SELECT de-normalized columns into separate records?。 (注意这里合成的行关系,虽然一些[非MySQL]数据库也支持表值函数和交叉应用程序。)

这种方法不能扩展,因为它不能使用索引。

在客户端(PHP)中过滤

获取每一行。根据需要循环并使用explode等。

由于缺少索引需要在本地获取所有数据,因此此方法无法扩展。


虽然可以使用各种黑客(例如FIND_IN_SET)在非规范化列中找到相等的值,但是使用相同的技术找不到相对(即,更大/更小)的值是不可能的。适用于这两种情况的解决方案是修复底层架构。

答案 3 :(得分:0)

如果您只使用DATE而不是DATETIME,则可以使用CURDATE()代替NOW()