我有一个MySQL数据库表,其中一个单元格包含多个日期,我想要选择包含一个或多个日期大于今天日期的单元格的所有行,这可能吗? (使用PHP)
答案 0 :(得分:2)
不确定
select * from MyTable where MyDate > Now()
您的单个字段如何包含多个日期?也许你应该为此考虑一个单独的表。
答案 1 :(得分:1)
如果字段是DATE
或DATETIME
,您可以使用
SELECT * FROM table WHERE datefield > NOW()
答案 2 :(得分:1)
“单个单元格包含多个日期”..是问题的症结所在。这有三个选项。
从充分规范化的架构开始 - 特别是,任何列/“单元格”最多可以包含一个日期(或一条信息)。这可能需要也可能不需要根据信息的作用引入另一个表格。
这种方法具有可扩展性,可在RDMBS / RA设计中使用,如果完成,其他查询将“正常工作”。
(这是迄今为止最好的选择,如果可能的话应该完成。适当的规范化也应该指导进一步的模式开发,以便在将来缓解这些问题。)
创建可以JOIN
ed的非规范化表(或这样的正常化查询)的规范化视图。然后使用一个各种建议的答案(适用于规范化的模式)..尽管处于无法利用索引的极端劣势。
这非常混乱,但可以做到。有关示例,请参阅SELECT de-normalized columns into separate records?。 (注意这里合成的行关系,虽然一些[非MySQL]数据库也支持表值函数和交叉应用程序。)
这种方法不能扩展,因为它不能使用索引。
获取每一行。根据需要循环并使用explode
等。
由于缺少索引和需要在本地获取所有数据,因此此方法无法扩展。
虽然可以使用各种黑客(例如FIND_IN_SET
)在非规范化列中找到相等的值,但是使用相同的技术找不到相对(即,更大/更小)的值是不可能的。适用于这两种情况的解决方案是修复底层架构。
答案 3 :(得分:0)
如果您只使用DATE
而不是DATETIME
,则可以使用CURDATE()
代替NOW()