我正在为孕妇建立一个网络应用程序(用于我的大学网络开发课程)
在我的数据库中,我存储了每个用户的概念日期.
在我的应用程序中,我采用概念日期并将其与今天进行比较,并向用户提供有关怀孕期间该点的一些信息.
我的数据库中还有一张表,其中包含怀孕的每个“阶段”的记录(即第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查询.
解决方法:
您的查询
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());,
有几个问题:
>不要使用隐式连接语法(使用where连接),这是令人困惑和折旧的;总是使用显式连接!见下文.
>您的查询中没有任何地方存在连接标准,其中来自阶段s的字段连接到来自患者p的字段,例如, (加入p.x = s.y)
>我建议不要在舞台数据库中使用单日.使用范围而不是将field stage.stageday替换为2个字段stage.startday和stage.endday
这是我的建议:
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语法,该语法清楚地显示了两个表的连接方式.
我在开始日和结束日添加了两个新字段,现在你只需要在怀孕期间每个阶段定义一行.你甚至可以有重叠的阶段.
0 =受孕日,196应该是出生日.不要忘记在出生晚期包括足够的额外天数:-).
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。