我正在为孕妇建立一个网络应用程序(用于我的大学网络开发课程)
在我的数据库中,我存储了每个用户的概念日期.
在我的应用程序中,我采用概念日期并将其与今天进行比较,并向用户提供有关怀孕期间该点的一些信息.
我的数据库中还有一张表,其中包含怀孕的每个“阶段”的记录(即第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应该是出生日.不要忘记在出生晚期包括足够的额外天数:-).
标签:php,mysql,date,extjs 来源: https://codeday.me/bug/20190827/1736079.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。