这是我的第一个问题。如果我不符合规定的规则,请道歉。我尽我所能
问题 - 我正在处理一个项目的问题。它以医疗为基础。我需要这三个表来从DB结构中获取报告 -
diseaseTable which has columns
diseaseID | diseaseName
diseaseID stores an integer i.e 1, 3, 4,..
dieseaseName stores name of disease e.g Hypertension, Malaria, ..e.tc
我也有患有这些关键专栏的病人表
patientID - which is an autoincrement int
patientName - name of patient
created_at - date and time of registration of the patient
最后有治疗表,其中包含
treatmentID -autoincrement int
patient - contains the id of the patient which is a foreing key of patientsTable
created_at and updated_at for timestamps
diseaseTreated (which is my column of interest) Stores values in json comma separated fields.
我已经检查了https://stackoverflow.com/search?q=mysql+comma+separated+fields的所有结果,但似乎没有解决我的问题。我已经检查了重构mysql架构的方法,但是我会有太多的表来存储每个病人诊断出来的疾病。此外,一名患者可能被诊断患有多种疾病,并且可以随时添加疾病。我可能有近100个。如果高血压的ID为1且关节炎为2,则患有两者的患者将具有
diseaseTreated field with "1","2" in the treatment table
预期的解决方案 - 我需要首次获得第一次或第二次治疗特定疾病的报告,以及更多,即重新治疗相同疾病的治疗(如果我想知道有多少例高血压患者是第一次时间,以及有多少高血压病例复发)
示例 - 新案例报告
Disease | New Cases
Hypertension | 4
示例 - 复发病例报告
Disease | New Cases
Hypertension | 1
Arthritis | 2
我使用Laravel我尝试了很多解决方案,但这是我发现太接近无法得到我需要的东西:我尝试的其他人循环遍历不同的数组结果我通过使用连接从数据库查询但我没有发布它们因为他们没有什么重要的。
$diseaseID
$countedDiseaseCases = DB::select('select * from treatmentTable where JSON_CONTAINS(diseases, \'[\"'.$diseaseID.'\"]\')')
这个会让我得到具有特定疾病的行,并通过在结果上使用php count()我得到一个int为3,这是好的,但我没有把它放在我期望过滤器和区分新的和经常性的情况。
谢谢,任何建议将受到高度赞赏
如果deseaseTreated列是json,你不能添加一个isNew键,当患者第二次访问时,将该键翻转为false或类似的东西?
现在,当您想要制作报告时,您可以获得所有这些报告。
//example deseaseTreated value
{
"deseases": [
{
"deseaseID":"Value",
"isNew":Boolean,
...
},
{...}
]
}
$records = DB::select('select * from treatment');
$diseases = DB::select('select * from diseases');
foreach ($diseases as $disease) {
$disease['count_new'] = 0;
}
foreach ($records as $record) {
$json = json_decode($record['diseaseTreated']);
foreach ($json['diseases'] as disease_index) {
if ($disease_index['isNew']) {
foreach ($diseases as &$d) {
if ($d['diseaseID'] == $disease_index['diseaseID']) {
$d['count_new']++;
}
}
}
}