具有连接表的高级查询和来自GET参数的多个值

时间:2016-06-18 22:31:50

标签: php sql get

首先,我要解释我最终想要发生什么,所以如果你能帮助我,你就不要浪费时间阅读所有这些:)

我正在根据他们提交的症状创建一个API,在其中输出用户可能患有的疾病。

我希望用户输入内容,这会进入网址,因为"症状= ... 喜欢:... / nameofmyapi / data?症状=头痛+头晕。我从GET参数中检索数据,但我完全不知道如何输出疾病的名称。

我的数据库如下所示:

  • 疾病

    • illnessId(int(11),AUTO_INCREMENT)
    • illnessName(VARCHAR(255))
  • 症状

    • symptomId(int(11),AUTO_INCREMENT)
    • symptomName(varchar(255))
  • illness_symptom

    • illnessId(来自疾病表)
    • 症状(来自症状表)

这个数据库设计确保你不会在一行中获得多个值并且没有相同的值,但就像我说的那样,我不知道如何搜索"或"过滤"基于另一个表的值的疾病。更不用说要检查多种症状......似乎不可能!

我已经得到了这个查询,所以当用户没有输入任何内容时我可以检索所有内容:

"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?症状=晕眩+头痛

帮助将不胜感激!

1 个答案:

答案 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')。

希望这有帮助!