2015-04-25 23 views
1

您好,我的數據庫中有兩個表。比較兩個表中的數據並檢查相同的數據

第一個是看起來像上表疾病...

enter image description here

而第二個是表病人看起來像這樣...

enter image description here

而且我有一個編輯頁面,我想讓用戶能夠更新他/她的疾病。一個例子是下面..

enter image description here

我想要做的是從從表疾病的列名錶病人檢查病情柱和檢查,如果從表中病人數據與來自表疾病的數據相同,然後從複選框中檢查相同的疾病。

我試圖找到一種方法,通過我想不出 這裏做的是我的代碼...

<?php 
$sql = "SELECT name FROM disease UNION SELECT disease FROM patient WHERE username='$username'"; 
$query_resource = mysql_query($sql); 

    while($name = mysql_fetch_assoc($query_resource)): 
?> 
    <span><?php echo $name['name']; ?></span> 
    <input type="checkbox" name="disease[]" value="<?php echo $name['name']; ?>" /><br /> 


<?php endwhile; ?> 

我店疾病在我的數據庫是這樣的方式......

$disease = implode(",",$_POST["disease"]); 

因爲用戶可能有很多疾病

+0

這聽起來你需要確保如果用戶inputed選中的值(s)爲疾病表。 – felipsmartins

+0

@felipsmartins是 – DogFace

+1

「我在我的數據庫中存儲疾病的方式是......」停止。見正常化。構建一個存儲patient_id和disease_id的單獨表格。 – Strawberry

回答

1

但我的答案不是你要找的東西。如果你構建這個應用程序,你應該考慮整合個人和desies表之間的關係。 besause這是MySQL關係數據庫:)

如果我得到你的權利:未測試

<?php 

$sql = "SELECT disease FROM patient WHERE username='$username'"; 
$query_resource = mysql_query($sql); 
$person = mysql_fetch_assoc($query_resource); 

$persons_desisies = explode(',', $person['disease']); 

$sql = "SELECT name FROM disease"; 
$query_resource = mysql_query($sql); 
$disease = Array(); 
    while($name = mysql_fetch_assoc($query_resource)): 
     ?> 
     <span><?php echo $name['name']; ?></span> 
     <input type="checkbox" name="disease[]" value="<?php echo $name['name']; ?>" <?php if(in_array($name['name'], $persons_desisies)): ?> checked="checked" <?php endif; ?>/><br /> 

    <?php endwhile; ?> 

理念 - 你得到patiens desieses列表,然後與全desies列表檢查。 :)

+0

這是我需要的代碼。謝謝:D – DogFace

+0

但你明白這是錯誤的做法:)但祝你好運! –

+0

是的,我試圖用自己爆炸,但沒有做到這一點,並與您的代碼我找出我做錯了什麼 – DogFace

0

需要進一步考慮:

DROP TABLE IF EXISTS patients; 

CREATE TABLE patients 
(patient_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY 
,name VARCHAR(12) 
); 

INSERT INTO patients VALUES 
(101,'Adam'), 
(102,'Ben'), 
(103,'Charlie'), 
(104,'Dan'); 

DROP TABLE IF EXISTS diseases; 

CREATE TABLE diseases 
(disease_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY 
,disease VARCHAR(50) NOT NULL UNIQUE 
); 

INSERT INTO diseases (disease) VALUES 
('Allergy'), 
('Cardiological'), 
('Dermatological'), 
('Gastrointestinal'), 
('Gynaecological'), 
('Ophthalmological'), 
('Pathological'), 
('Otorhinolaryngological'), 
('Nephrological'), 
('Neurological'); 

DROP TABLE IF EXISTS patient_disease; 

CREATE TABLE patient_disease 
(patient_id INT NOT NULL 
,disease_id INT NOT NULL 
,PRIMARY KEY(patient_id,disease_id) 
); 

INSERT INTO patient_disease VALUES 
(101,3), 
(101,5), 
(101,6), 
(102,1), 
(103,1), 
(103,7), 
(103,8); 

SELECT p.* 
    , d.* 
    , CASE WHEN pd.disease_id IS NULL THEN 'no' ELSE 'yes' END manifest 
    FROM patients p 
    JOIN diseases d 
    LEFT 
    JOIN patient_disease pd 
    ON pd.patient_id = p.patient_id 
    AND pd.disease_id = d.disease_id 
ORDER BY p.patient_id 
    , d.disease_id; 
+------------+---------+------------+------------------------+----------+ 
| patient_id | name | disease_id | disease    | manifest | 
+------------+---------+------------+------------------------+----------+ 
|  101 | Adam |   1 | Allergy    | no  | 
|  101 | Adam |   2 | Cardiological   | no  | 
|  101 | Adam |   3 | Dermatological   | yes  | 
|  101 | Adam |   4 | Gastrointestinal  | no  | 
|  101 | Adam |   5 | Gynaecological   | yes  | 
|  101 | Adam |   6 | Ophthalmological  | yes  | 
|  101 | Adam |   7 | Pathological   | no  | 
|  101 | Adam |   8 | Otorhinolaryngological | no  | 
|  101 | Adam |   9 | Nephrological   | no  | 
|  101 | Adam |   10 | Neurological   | no  | 
|  102 | Ben  |   1 | Allergy    | yes  | 
|  102 | Ben  |   2 | Cardiological   | no  | 
|  102 | Ben  |   3 | Dermatological   | no  | 
|  102 | Ben  |   4 | Gastrointestinal  | no  | 
|  102 | Ben  |   5 | Gynaecological   | no  | 
|  102 | Ben  |   6 | Ophthalmological  | no  | 
|  102 | Ben  |   7 | Pathological   | no  | 
|  102 | Ben  |   8 | Otorhinolaryngological | no  | 
|  102 | Ben  |   9 | Nephrological   | no  | 
|  102 | Ben  |   10 | Neurological   | no  | 
|  103 | Charlie |   1 | Allergy    | yes  | 
|  103 | Charlie |   2 | Cardiological   | no  | 
|  103 | Charlie |   3 | Dermatological   | no  | 
|  103 | Charlie |   4 | Gastrointestinal  | no  | 
|  103 | Charlie |   5 | Gynaecological   | no  | 
|  103 | Charlie |   6 | Ophthalmological  | no  | 
|  103 | Charlie |   7 | Pathological   | yes  | 
|  103 | Charlie |   8 | Otorhinolaryngological | yes  | 
|  103 | Charlie |   9 | Nephrological   | no  | 
|  103 | Charlie |   10 | Neurological   | no  | 
|  104 | Dan  |   1 | Allergy    | no  | 
|  104 | Dan  |   2 | Cardiological   | no  | 
|  104 | Dan  |   3 | Dermatological   | no  | 
|  104 | Dan  |   4 | Gastrointestinal  | no  | 
|  104 | Dan  |   5 | Gynaecological   | no  | 
|  104 | Dan  |   6 | Ophthalmological  | no  | 
|  104 | Dan  |   7 | Pathological   | no  | 
|  104 | Dan  |   8 | Otorhinolaryngological | no  | 
|  104 | Dan  |   9 | Nephrological   | no  | 
|  104 | Dan  |   10 | Neurological   | no  | 
+------------+---------+------------+------------------------+----------+