1

私のmysqlデータベースには次のテーブルがあります。誰かが食道がんを発症している可能性があるかどうかを仮想的に評価できるアプリケーションを作成しようとしています

#tblsymptoms - すべての症状を保持
######################################
症状ID | 症状    
--------------------------------------
1 喉の塊        
2 飲み込みにくい   
3 最近痩せた
4 胸焼け
5 しわがれた咳
6 吐血


#tblresponse - すべての応答を保持します
######################################
応答 ID | 応答   
-------------------------------------------------- ---
1 あなたの症状は、あなたに問題があることを示唆しています       
2 食道がんの可能性があります  
3 咽頭癌ではない


#tblrelation - 反応と症状の関係を保持
######################################
関係 ID | 応答 ID | 症状ID
------------------------------
1 1 3
2 1 4
3 1 5
4 2 1
5 2 2
6 2 3
7 4 2
8 2 5
9 2 6
10 3 3
11 3 4

HTMLフォームでチェックボックスを使用してデータベースを照会したいのですが、フォームのコードは次のとおりです。

<form method="post" action="process.php">
<INPUT TYPE=CHECKBOX NAME="option[]" VALUE="Difficulty in swallowing" id="">Difficulty in swallowing<br>
<INPUT TYPE=CHECKBOX NAME="option[]" VALUE="Difficulty in swallowing" id="">Difficulty in swallowing<br>
<INPUT TYPE=CHECKBOX NAME="option[]" VALUE="Lost weight lately" id="">Lost weight lately<br>
<INPUT TYPE=CHECKBOX NAME="option[]" VALUE="Heartburn" id="">Heartburn<br>
<INPUT TYPE=CHECKBOX NAME="option[]" VALUE="Hoarse-sounding cough" id="">Hoarse-sounding cough<br>
<INPUT TYPE=CHECKBOX NAME="option[]" VALUE="Vomit blood" id="">Vomit blood<br>
<input type="submit" name="formSubmit" value="Diagnose me" />
</form>

ここで、誰かが選択した場合に備えてLost weight lately and Heartburn、スクリプトは tblResponse>>>responseID=1 からデータを取得し、ユーザーに表示する必要があります。Your symptoms suggest you have a problem.

私は試しましたが、0の値を返します

SELECT tblresponse.response
FROM tblrelation 
   LEFT JOIN tblresponse ON tblrelation.responseID = tblresponse.responseID
WHERE tblrelation.symptomID = '3' AND tblrelation.symptomID = '4' 

データベースにクエリを実行するためのチェックボックスを備えたhtmlフォームに追加する必要があるコードについてアイデアを持っている人はいますか?

4

3 に答える 3

0

There is a design issue with #tblrelation.

The symptom of Hoarse-sounding cough will return both "a problem" and "You may be having Oesophageal carcinoma".

The combination of symptoms that result in a specific response need to be on a single row to establish the relationship as unique.

Tackle that before you do anything else, otherwise you'll never get the results your after.

You could create the table like this:

relationID  | responseID | symptomID
-----------------------------
1         1          3, 4, 5

but that would make for an ugly sql query when it came time to retrieve it.

If it were me, I think I would move that processing into the application. You could evaluate which boxes are checked and which are not and find the appropriate response without ever passing it to sql.

于 2013-03-01T15:19:05.530 に答える
0

これを試して:

SELECT response from tblresponse where responseID = (
SELECT responseID from tblrelation 
 where symptomID=4 or symptomID=3
 group by responseID
 having count(*) = 2
)

また、count all (選択した値の数) を渡す必要があります。この場合、(選択したオプション) に等しい 2 を使用しました。

デモ

編集:3、4、および5の場合

SELECT * from tblresponse where responseID = (
SELECT responseID from tblrelation 
 where symptomID=4 or symptomID=3 or symptomID=5
 group by responseID
 having count(*) = 3
)

デモ2

于 2013-03-01T15:29:15.117 に答える
0

1 つの列に複数の値を含めることはできません。これを試して:

SELECT tblresponse.response
FROM tblrelation LEFT JOIN
     tblresponse
      ON tblrelation.responseID = tblresponse.responseID
GROUP BY tblresponse.response
having sum(case when tblrelation.symptomID = '3' then 1 else 0 end) > 0 and
       sum(case when tblrelation.symptomID = '4' then 1 else 0 end) > 0

これにより、特定の応答のすべての関係がグループ化されます。このhaving句は、「3」の数と「4」の数を別々に数えます。これらが両方とも 0 より大きい場合、応答が返されます。

ちなみに、ID が数字の場合、引用符は必要ありません。

于 2013-03-01T14:45:03.683 に答える