首先,我要解释我最终想要发生什么,所以如果你能帮助我,你就不要浪费时间阅读所有这些:)
我正在根据他们提交的症状创建一个API,在其中输出用户可能患有的疾病。
我希望用户输入内容,这会进入网址,因为"症状= ... 喜欢:... / nameofmyapi / data?症状=头痛+头晕。我从GET参数中检索数据,但我完全不知道如何输出疾病的名称。
我的数据库如下所示:
疾病
症状
illness_symptom
这个数据库设计确保你不会在一行中获得多个值并且没有相同的值,但就像我说的那样,我不知道如何搜索"或"过滤"基于另一个表的值的疾病。更不用说要检查多种症状......似乎不可能!
我已经得到了这个查询,所以当用户没有输入任何内容时我可以检索所有内容:
"SELECT illness.illnessId, illness.illnessName, symptom.symptomName FROM illness_symptom
JOIN illness
ON illness.illnessId = illness_symptom.illnessId
JOIN symptom
ON symptom.symptomId = illness_symptom.symptomId";
这给了我这个: image
就像我说的那样,我只想输出" Whiplash"当网址看起来像这样:/ nameofmyapi / data?症状=晕眩+头痛
帮助将不胜感激!
答案 0 :(得分:0)
首先关闭所有:只输出'鞭打'是行不通的,因为你的其他疾病也与症状'晕眩'有关。
我已经用你的结构创建了一个数据库(只重命名了这些字段以获得更多的默认约定。还会查看你的表名以复制它们)并提出了这个查询:
SELECT i.id, i.name
FROM illness_symptom AS ils
JOIN illness AS i ON i.id = ils.illness_id
JOIN symptom AS s ON s.id = ils.symptom_id
WHERE s.name IN ('dizzyness', 'headache')
GROUP BY i.name
IN部分搜索您的表并过滤掉具有不同症状的所有其他结果。您可以将结果从GET查询转换为查询中使用的逗号分隔列表。
GROUP BY部分确保您不会获得任何双重结果。当然,您需要确保结果只存在于您的数据库中一次(没有双重记录,例如'whiplaSh')。
希望这有帮助!