Php 获得顶级独特的结果,获得奇数。。结果

Php 获得顶级独特的结果,获得奇数。。结果,php,mysql,sql,calendar,unique,Php,Mysql,Sql,Calendar,Unique,我对编程相当陌生,似乎无法在这里找出我的错误 我有一个日历设置,每次用户改变一天,我就换一行。通过这种方式记录所有更改(同样是新的,我认为有更好的方法)。每行都有一些显示的信息,但其主要区别是一个月、一天和一年。2013年1月31日 我需要为每月的每一天获取最新的唯一行。因此,如果我运行2013年1月31日的查询,我只需要返回最近创建的行,其中month='1'等等 我在用 SELECT t.* FROM(SELECT * FROM calendar a WHERE NOT EXISTS(SE

我对编程相当陌生,似乎无法在这里找出我的错误

我有一个日历设置,每次用户改变一天,我就换一行。通过这种方式记录所有更改(同样是新的,我认为有更好的方法)。每行都有一些显示的信息,但其主要区别是一个月、一天和一年。2013年1月31日

我需要为每月的每一天获取最新的唯一行。因此,如果我运行2013年1月31日的查询,我只需要返回最近创建的行,其中month='1'等等

我在用

SELECT t.* FROM(SELECT * FROM calendar a 
WHERE NOT EXISTS(SELECT * FROM calendar b 
WHERE b.day = a.day AND b.lastaltered > a.lastaltered))  t 
WHERE t.month = '12' AND t.year = '2013'
从PHP,如果这很重要的话

现在,如果用户缓慢地进行更改,它可以正常工作。但我发现,如果有人很快就完成了这个任务,比如输入了几天,最后得到了一个非常接近的时间戳(“lastcated”),那么我当前的查询不会返回该行。我通过将时间戳修改到更晚的日期来测试它,然后它正常返回。我希望这能很好地解释我的问题。我仍然不清楚为什么更改时间戳会导致该行返回

谢谢你抽出时间!
-杰瑞

啊。。。在一个不知道时间是什么的数据库中管理时间(他们都不知道)

开始,阅读第一本书-它解释了时间的复杂性以及使用一种数据类型(DateTime)来表示不同概念的困难:

  • 固定时间:UTC 2013年12月4日上午10:15
  • 重复出现的时刻:每天上午10:15,每个星期二或一个月的最后一个星期一
  • 从锚定定义的瞬间:2小时后
  • 浮动间隔:2小时
  • 锚定时间间隔:UTC 2013年12月4日上午10:15到下午12:15之间的2小时
  • 一个不存在的瞬间:2014年10月5日星期日凌晨2:30澳大利亚东部夏令时
  • 相隔1小时发生两次的瞬间:2014年4月6日星期日凌晨2:30澳大利亚东部夏令时
  • 。。。你明白了

处理问题的最干净的方法是使用ValidFrom和ValidTo DateTime字段,当用户创建行时,ValidFrom设置为now,ValidTo设置为NULL,并且执行一个触发器,将所有具有NULL ValidTo的旧条目设置为now。这将提供一个完整的审计跟踪,您可以通过查询具有空ValidTo的条目来获取当前条目。

谢谢,这似乎正是我需要的。我的想法是,正如您所说,每当发生插入时,使用bit列将所有其他相同的“日”(定义为月/日/年)设置为“假”。我唯一需要弄清楚的是,如何让触发器从插入中获取月=x天=y年=z,并在插入之前发生。(将所有其他字段设置为false)before部分很简单,我看到有一个before关键字。