Сравните данные из двух таблиц и проверьте одни и те же данные

Здравствуйте, у меня есть две таблицы в моей базе данных.

Первая - это болезнь стола, похожая на приведенную выше ...

введите описание изображения здесь

А второй - столик пациента, который выглядит вот так ...

введите описание изображения здесь

И у меня есть страница редактирования, на которой я хочу дать пользователю возможность обновлять информацию о своих заболеваниях. Пример ниже ..

введите описание изображения здесь

Что я хочу сделать, так это проверить столбец болезни из таблицы пациента с именем столбца из таблицы болезнь и проверить, совпадают ли данные из таблицы пациента с данными из таблицы болезнь, а затем отметьте флажками то же самое болезнь.

Я пытался найти способ сделать это, я не мог Вот мой код ...

<?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"]);

Потому что у пользователя может быть много заболеваний


person Waaaaat    schedule 25.04.2015    source источник
comment
Похоже, вам нужно убедиться, что проверенные значения, введенные пользователем, находятся в таблице болезней.   -  person felipsmartins    schedule 25.04.2015
comment
Я храню болезни в своей базе данных так ... СТОП. См. Нормализацию. Создайте отдельную таблицу, в которой хранятся идентификатор пациента и идентификатор болезни.   -  person Strawberry    schedule 25.04.2015


Ответы (2)


Однако мой ответ - не то, что вам нужно. Если вы создаете это приложение, вам следует подумать об интеграции отношений между таблицами людей и желаний. потому что это реляционные базы данных 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; ?>

Идея - вы получаете список желаний для пациентов, а затем сверяете их с полным списком желаний. :)

person Arturas Tutkus    schedule 25.04.2015
comment
но вы понимаете, что это неправильный способ делать это :) но удачи! - person Arturas Tutkus; 25.04.2015
comment
Да, я сам пытался использовать Explode, но сделал это неправильно, а с вашим кодом я понял, что я делал не так - person Waaaaat; 25.04.2015

Для дальнейшего рассмотрения:

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       |
+------------+---------+------------+------------------------+----------+
person Strawberry    schedule 25.04.2015