模糊搜索你不需要單獨存儲每個部分具體的日期。你可以調整你的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