Как я могу поднять заболевание из симптомов, которые это связало с этим в MySQL? - PullRequest
0 голосов
/ 18 мая 2018

Это мой первый вопрос на этой странице, и извините, если я не конкретен в некоторых вещах, или я не очень хорошо объясняю себя, более того, английский не мой родной язык, поэтому я могу допускать некоторые грамматические ошибки, так что извинитезаранее.

Хорошо, я использую базу данных в MySQL, и у меня возникла проблема при попытке получить запрос и вернуть то, что я хочу, возможно, из-за того, что моих знаний недостаточно ...

Ну, у меня есть две таблицы: заболевания и симптомы, которые имеют отношение многие ко многим, то есть болезнь может иметь 1 или более симптомов и наоборот.Это приводит к генерации еще одной таблицы, которая связывает две предыдущие, и это (таблица называется animals_diagnosis):

table animals_diagnosis

Хорошо, теперь возникает проблема, я хочу взять id_enfermedade, которыйсоответствует точным симптомам, которые я прохожу (если у него есть еще один или менее симптом, он не должен возвращать это заболевание), я имею в виду, я просто одна система для возврата болезни, которая соответствует точным симптомам, которые я привожу.Это реальная таблица, которую я получил:

name of the table: enfermedades_diagnosticos

Дело в том, что если я пропущу симптомы 2 и 6, он должен вернуть это:

after passing id_sintoma 2 and 6

НО я хочу просто вернуть, если точные симптомы совпадают, я имею в виду, если есть другое заболевание с такими же симптомами плюс другое, которое система должна игнорировать, например:

если мы передадим: 1,2,3,4,5,6,7, он должен вернуть 6

, но если мы передадим 1,2,3,4,5,6, он должен вернуть ноль илипустой, потому что нет никаких болезней с этими точными симптомами

Как я уже упоминал выше, мой уровень SQL очень низок и мешает мне приблизиться.

Это немного расстраивает, когда я могу 'Я не могу справиться с вещами такого уровня, поэтому я надеюсь, что кто-нибудь сможет мне помочь.

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Один метод заключается в использовании group by и having следующим образом:

SELECT id_enfermedade
FROM disease_diagnosis 
GROUP BY symptom_ID
HAVING SUM( symptom_ID IN (1, 2, 3) ) = 3 AND
       SUM( symptom_ID NOT IN (1, 2, 3) ) = 0;

В качестве альтернативы, вы можете выразить HAVING как:

HAVING GROUP_CONCAT(id_enfermedade ORDER BY id_enfermedade) = '1,2,3'

Это делает егопроще передать в списке в качестве единственного параметра.

0 голосов
/ 18 мая 2018

Разве это не должно быть так, глядя на структуру вашей таблицы:

SELECT Top 1 id_enfermedade FROM disease_diagnosis WHERE id_sintoma IN (1, 2, 3);

Она вернет 'a'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...