我有一个网站,其中网址包含年份,月份,日期以及文章标题生成的永久链接。例如
www.example.com/1999/12/31/techno-party
但由于文章的发布时间需要每小时,而不仅仅是每个日期(例如,您可以将发布时间设置为白天的12:00或13:00),这意味着发布时间列在数据库需要是datetime
数据类型,而不仅仅是date
。这意味着我可以在12月31日中午12点发布一篇永久链接techno-party
的文章,并在同一天13:00发布另一篇文章(具有相同的固定链接)(重复)由另一个用户创建,或者是错误的,不相关的),并且他们的URL最终将是相同的。
因此,为了避免在这种情况下重复,我需要一个永久链接字符串,月份,日期和年份的唯一索引。但显然,如果我在permalink
列和datetime
列上设置UNIQUE索引,我仍然可以有很多重复项,因为它只会限制它们以相同的秒发布。
理论上我需要的是来自datetime
列(忽略小时/分钟/秒)+ permalink
列的年,月和日期值的唯一索引。但是从数据库级别可以做到这样吗?
答案 0 :(得分:0)
您正在寻找的是基于函数的索引,MySQL不支持该索引。 (请参阅PostgreSQL docs以获得想法)。
作为一种变通方法,您可以为日期部分添加单独的索引列,并使用插入和更新触发器填充它。
答案 1 :(得分:0)
一种解决方案是分别存储日期和时间。
否则,您可以尝试添加("隐藏")DATE字段和触发器。
create trigger setArticleDate BEFORE INSERT ON article
for each row set NEW.__date = DATE(NEW.publish);
然后在永久链接和__date上创建一个UNIQUE。