在MySQL中,我如何比较今天的日期与数据库表中的日期?

时间:2011-04-27 17:39:39

标签: php mysql date extjs

我正在为孕妇建立一个网络应用程序(用于我的大学网络发展课程)
在我的数据库中,我存储了每个用户的概念日期。

在我的应用程序中,我采用受孕日期并将其与今天进行比较,并向用户提供有关怀孕期间该点的一些信息。

我的数据库中还有一张表,其中包含怀孕的每个“阶段”的记录(即第1阶段= 1-2个月,阶段2 = 2-3个月等)
那么我将如何构建我的MySQL查询?这就是我一直在尝试的...

SELECT s.id as stageid
  , p.id as patientid
  , s.name
  , s.nutritioninfo
  , s.commonsymptoms
  , p.conceptiondate 
FROM stage s, patient p 
WHERE p.id=? AND TO_DAYS(p.conceptiondate)=To_DAYS(NOW());,

上面的最后一行(TO_Days()=TO_DAYS()部分)是我正在努力的部分  为“舞台”表格中的每个阶段存储一行开始日期和结束日期是明智的吗? 但那么如何才能起作用,因为我的所有用户都有不同的概念日期?

我将在php中使用此查询,然后在我在ExtJS中构建的界面中使用该PHP查询。

2 个答案:

答案 0 :(得分:3)

我不会在临时表中保留实际的“日期”,而是开始和停止DAY ...例如:第一个月将是从第0天到第30天......第二个月从第31天到第60天等等。

然后,您的查询可以查询(伪造语法)

的位置
current_date() between Conception + Stage.StartDays 
                   and Conception + Stage.StopDays

在MySQL中,它的语法是

date_add( Conception, interval Stage.StartDays day ) as an example.

这样,一个人在1月1日怀孕就会在第4个月,但是昨天怀孕的人将在第一个月(或者根据“月份”的分类方式为零)。

答案 1 :(得分:3)

您的查询

SELECT s.id as stageid
  , p.id as patientid
  , s.name
  , s.nutritioninfo
  , s.commonsymptoms
  , p.conceptiondate 
FROM stage s, patient p 
WHERE p.id=? and TO_DAYS(p.conceptiondate)=To_DAYS(NOW());,

有几个问题:

  1. 不要使用隐式连接语法(使用where连接),这是令人困惑和折旧的; 始终使用显式连接!请参阅下文。
  2. 您的查询中没有任何地方存在加入条件,其中stage s的字段与patient p的字段相关联,例如 (join on p.x = s.y)
  3. 我建议不要在舞台数据库中使用单日。使用范围而非将字段stage.stageday替换为2个字段stage.startdaystage.endday
  4. 这是我的建议:

    SELECT s.id as stageid
     , p.id as patientid
     , s.name
     , s.nutritioninfo
     , s.commonsymptoms
     , p.conceptiondate 
    FROM patient p
    INNER JOIN stage s 
      ON (DATEDIFF(CURDATE(), p.conceptiondate) BETWEEN s.startday AND s.endday)
    WHERE p.id=?
    

    这使用显式连接cf ANSI 92语法,清楚地显示了两个表的连接方式 我添加了两个新字段startdayendday,现在您只需在怀孕期间每阶段定义一行。你甚至可以有重叠的阶段 0 =受孕日,196应该是出生日。不要忘记在出生晚期包括足够的额外天数:-)。