2016-11-06 1 views
1

에 따라 값으로 열을 추가 :/MySQL의 - 내부 조인 - 조인 내가 MySQL과 사투를 벌인거야 다른 값

나는 데이터베이스 철 내부에 여러 테이블을했습니다. 작업, 사용자

작업 다양한 변수와 작업을 포함하지만 가장 중요한 - 아이디의 사용자는 (다른 작업 내부 역할로 - 작가, 그래픽, 보정) 작업에 로그인 :

+---------+-------------+--------------+ 
| task_id | task_author | task_graphic | 
+---------+-------------+--------------+ 
| 444  | 1   | 2   | 
+---------+-------------+--------------+ 

사용자

+---------+----------------+------------+-----------+ 
| user_id | user_nice_name | user_login | user_role | 
+---------+----------------+------------+-----------+ 
| 1  | Nice Name #1 | login1  | 0   | 
+---------+----------------+------------+-----------+ 
| 2  | Bad Name #2 | login2  | 1   | 
+---------+----------------+------------+-----------+ 

사용

+---------+--------------+--------------+----------------+------------+-----------+------------------+------------------------+------------+-------------+-----------------+-----------+----------------+--------------------+---------------------+-----------+---------------------+------------------+---------------------+ 
| task_id | task_creator | task_graphic | task_purchaser | task_title | task_lang | task_description | task_description_files | task_files | task_status | task_prod_index | task_type | task_print_run | task_print_company | task_warehouse_code | task_cost | task_time_added  | task_deadline | task_date_warehouse | 
+---------+--------------+--------------+----------------+------------+-----------+------------------+------------------------+------------+-------------+-----------------+-----------+----------------+--------------------+---------------------+-----------+---------------------+------------------+---------------------+ 
| 2  | 1   | 2   | 1    | Test  | PL  | Lorem ipsum (?) |      |   | w   | 2222   | 3   | 456546   | Firma XYZ   | 2     | 124  | 29.09.2016 15:48:20 | 01.10.2016 12:00 | 07.10.2016 14:00 | 
+---------+--------------+--------------+----------------+------------+-----------+------------------+------------------------+------------+-------------+-----------------+-----------+----------------+--------------------+---------------------+-----------+---------------------+------------------+---------------------+ 

내가 좀하고 싶습니다 : PDO 나는 INNER 다른 테이블에서 데이터 (그리고 $ _GET 변수) 쿼리 위

SELECT tasks.*, types.types_name, warehouse.warehouse_id, warehouse.warehouse_code, warehouse.warehouse_description 
FROM tasks 
INNER JOIN types ON types.types_id = tasks.task_id 
INNER JOIN warehouse ON warehouse.warehouse_id = tasks.task_id 
WHERE tasks.task_id = '".$get_id."' 
ORDER BY tasks.task_id 

반환에 가입하기 사용하는 동안 내가 원하는 모든 데이터를 받고 있어요 task_creator, task_author 및 task_graphic 다음에 user_nice_name이 추가 된 쿼리 - 테이블 사용자로부터 분명히 선택된 멋진 이름은 위의 3 필드에서 제공하는 ID를 기반으로합니다. fe.

+---------+--------------+------------------------------------+--------------+--------------------------------------+ 
| task_id | task_creator | task_creator_nn     | task_graphic | task_graphic       | 
+---------+--------------+------------------------------------+--------------+--------------------------------------+ 
| 2  | 1   | Nice Name (from task_creator ID=1) | 2   | Nice Name (from task_graphic ID = 2) | 
+---------+--------------+------------------------------------+--------------+--------------------------------------+ 

어떻게 구현할 수 있습니까? 당신은 세 가지가 필요

+0

는이 INNER가 users.user_nice_name = tasks.task_graphic' ON 사용자가 가입하세요' – scaisEdge

+0

task_graphic 이름이 포함 된 테이블에 대해 조인 추가? – knysha

답변

0

조인 :

SELECT t.*, 
     uc.user_nice_name as creator_name, 
     ug.user_nice_name as graphic_name, 
     up.user_nice_name as purchaser_name, 
     ty.types_name, w.warehouse_id, w.warehouse_code, w.warehouse_description 
FROM tasks t INNER JOIN 
    types ty 
    ON ty.types_id = t.task_id INNER JOIN 
    warehouse w 
    ON w.warehouse_id = t.task_id LEFT JOIN 
    users uc 
    ON uc.user_id = t.task_creator LEFT JOIN 
    users ug 
    ON ug.user_id = t.task_graphic LEFT JOIN 
    users up 
    ON up.user_id = t.task_purchaser 
WHERE t.task_id = '".$get_id."' 
ORDER BY t.task_id; 

참고 :

  • 테이블 별칭 쓰기 및 읽기 쿼리를 쉽게합니다. FROM 절에 users에 대한 세 가지 참조가 있으므로이 또한 필요합니다.
  • 일부 참조 값이 누락 된 경우 usersLEFT JOIN을 사용합니다.
  • 이름을 지정해야합니다. "창고"ID가 "작업"ID와 일치한다는 것은 의미가 없습니다. 또는 "작업"ID가 "유형"ID와 일치해야합니다. 그러나 이것이 귀하의 질문에서 당신이 말한 문구입니다.
  • ORDER BY은 모든 행에 동일한 task_id이 있으므로 실제로 적용되지 않습니다.
+0

고마워요! 매력처럼 작동 :) – knysha

0

task_graphic_name 테이블 이름 안에 task_graphic_table과의 관계 필드가

SELECT tasks.* 
     , types.types_name 
     , warehouse.warehouse_id 
     , warehouse.warehouse_code 
     , warehouse.warehouse_description 
     , users.user_nice_name 
FROM tasks 
INNER JOIN types ON types.types_id = tasks.task_id 
INNER JOIN warehouse ON warehouse.warehouse_id = tasks.task_id 
INNER JOIN users ON users.user_nice_name = tasks.task_graphic 
WHERE tasks.task_id = '".$get_id."' 
ORDER BY tasks.task_id 

을 task_graphic_id 있습니다 그리고 당신은 열이 특정 순서로 표시해야 할 경우 explicitally 시퀀스 등의 열 이름을 호출해야한다고 가정 :

SELECT tasks.col1 
     , task.col2 
     , types.types_name 
     , warehouse.warehouse_id 
     , warehouse.warehouse_code 
     , task.col2 
     , warehouse.warehouse_description 
     , task_graphic_table.task_graphic_name 
0

두 개의 하위 쿼리를 쿼리에 추가하십시오.같은

SELECT tasks.*, 
.... 
...., 
(select user_nice_name from users where id = tasks.task_author) AS task_creator_name, 
(select user_nice_name from users where id = tasks.task_graphic) AS task_graphic_name 
FROM tasks 
INNER JOIN types ON types.types_id = tasks.task_id 
.... 
....