2016-08-30 3 views
0

Документов таблицы (req1-7 являются идентификаторы требований из другой таблицы)Как получить значение из другой таблицы по их идентификаторам из другой таблицы?

| document_id | document_name | document_amount | req_1 | req_2 | req_3 | req_4 | req_5 | req_6 | req_7 | 
|  1  | Diploma  |  40   | 1 | 3 | 4 |  4 | 6 | 7 | 8 | 

Требование таблицы

| requirement_id | requirement_name | 
| 1   | 1 x 1 picture | 
| 2   | 2 x 2 picture | 
| 3   | Registration form| 
| 4   | Clearance  | 
| 5   | Medical cert  | 
| 6   | xray result  | 
| 7   | excuse letter | 
| 8   | affidavit  | 
| 9   | comsoc clearance | 

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

Я хочу знать правильный синтаксис для запроса тех

До сих пор мой запрос:

SELECT * FROM document_tbl 
      WHERE requirement1,requirement2,requirement3,requirement4,requirement5,requirement6,requirement7 
      IN (
       SELECT requirement_name FROM requirements_tbl WHERE requirement_id=requirement1,requirement2,requirement3,requirement4,requirement5,requirement6,requirement7)"; 

Но я screwedup каким-то образом. Заранее спасибо за помощь. Буду премного благодарен.

+1

Какое отношение это имеет к PHP? – Aaron

+0

Какой выход вы получаете с этим запросом? – phil652

+1

Это неэффективный способ написания требований. Я бы рекомендовал вам нормализовать вашу базу данных. Обратите внимание на это: http://www.studytonight.com/dbms/database-normalization –

ответ

0

Что-то вроде этого:

SELECT d.document_id, 
    d.document_name, 
    d.document_amount, 
    r1.requirement_name AS req_1, 
    r2.requirement_name AS req_2, 
    r3.requirement_name AS req_3, 
    r4.requirement_name AS req_4, 
    r5.requirement_name AS req_5, 
    r6.requirement_name AS req_6, 
    r7.requirement_name AS req_7 
FROM documents AS d, 
    requirements AS r1, 
    requirements AS r2, 
    requirements AS r3, 
    requirements AS r4, 
    requirements AS r5, 
    requirements AS r6, 
    requirements AS r7 
WHERE d.req_1 = r1.requirement_id 
    AND d.req_2 = r2.requirement_id 
    AND d.req_3 = r3.requirement_id 
    AND d.req_4 = r4.requirement_id 
    AND d.req_5 = r5.requirement_id 
    AND d.req_6 = r6.requirement_id 
    AND d.req_7 = r7.requirement_id 

и так далее.

+0

Это работает @MartynasTumas. Но, как они сказали выше. Он обрабатывает выходы медленным образом, однако дает точный результат. благодаря –

1

Промежуточная таблица (document_requirements)

| document_id | requirement_id | 
|  1  | 1    | 
|  1  | 3    | 
|  1  | 4    | 
|  1  | 6    | 
|  1  | 6    | 
|  1  | 7    | 
|  1  | 8    | 

Запрос

SELECT d.document_id,dr.requirement_id,r.requirement_name 
FROM documents AS d 
JOIN document_requirements AS dr ON (dr.document_id=d.document_id) 
JOIN requirements AS r ON (r.requirement_id=dr.requirement_id) 
WHERE d.document_id = 1; 
+0

can''t требования должны отображаться горизонтально? @Mohammed Yasin? И не может быть показано с их соответствующими именами? –

+0

Возможно, это возможно с 7 подборами, но, как упоминалось выше, это было бы очень неэффективно. С помощью этого метода вы все равно можете просмотреть результаты и получить имена, которые включены в запрос выше, как «r.requirement_name» –

+0

@Mohammed Yasin Должен ли я создать другую таблицу с именем document_requirements: Если это так, то имя столбцы, которые он содержит? Извините, что не ответил. Я был занят школьными проектами. –

Смежные вопросы