模糊搜索你不需要单独存储每个部分具体的日期。你可以调整你的where子句。一切从2012:
SELECT * FROM yourtable
WHERE yourtime >= '2012-01-01' AND yourtime < '2013-01-01'
如果你想有一个特定的一天:
SELECT * FROM yourtable
WHERE yourtime >= '2012-07-28' AND yourtime < '2012-07-29'
或特定小时:
SELECT * FROM yourtable
WHERE yourtime >= '2012-07-28 13:00:00' AND yourtime < '2012-07-28 14:00:00'
要使所有这些查询效率,你可以添加索引到你的时间戳列。
关于如何店模糊日期,一个选择是有一定范围的日期:
id taken_from taken_to title
1 2011-01-01 00:00:00 2012-01-01 00:00:00 a pic of my car last year
有关模糊日期,你可以做这样的事情模糊搜索:
In伪SQL:
SELECT
*,
(LEAST(@to, taken_to) - GREATEST(@from, taken_from))/
(GREATEST(@to - taken_to) - LEAST(@from, taken_from)) AS relevancy
FROM yourtable
WHERE taken_to >= @from AND taken_from < @to
你可能想通过相关命令,你可能要包括其他因素,如通过全文搜索某些字词返回的相关性。
这种方法适用于如果你知道什么时候被拍摄的照片进行搜索,但有可能存储与只用了一年的日期,或仅短短十年?我可能有我认为是在20世纪20年代拍摄的照片,但我不能说比这更准确,而且我不想将它们存储为1920年1月1日拍摄,如果这不准确 – user1111284 2012-07-28 22:02:51
@ user1111284:嗯......你可以存储一系列的日期,在这些日期你认为照片可能被拍摄,例如'从' - '到'。但是,如果您在2012年拍摄了一段时间的照片并且您的搜索是“2012年6月的所有照片”,那么会发生什么?该照片是否应该包含在搜索中?它*可能在六月份被采纳,但最有可能的不是。也许你可以根据照片范围和搜索范围之间的重叠百分比进行排序。 – 2012-07-28 22:07:20
是的,我不确定是否要包含这些项目。也许让他们在明确结果下面的一个单独列表中,按照准确性排序。 – user1111284 2012-07-28 22:08:54