2016-06-18 2 views
0

비슷한 질문이 있지만 도움이되지 않는 것 같습니다 ... 정확하게 이해하지 못하고 예제를 내 요구 사항으로 번역 할 수 있습니다. 어떤 도움을 주셔서 감사합니다.PHP MySQL UPDATE 조인 테이블

$ _POST 양식의 입력 필드를 사용자 테이블 (특히 관리자 키), 관리자 이름 (양식), 관리자 ID (DB)로 변환하려고합니다. 예를 보여 드리겠습니다.

Google DB에는 (다른 테이블과 마찬가지로) 사용자 테이블과 관리자 이름이 있습니다. 관리자 테이블에는 관리자의 ID (처음에는 & 성)가 있습니다. users 테이블에는 고유 id, first_name, last_name 및 연관된 관리자 ID가 있습니다. 이는 모습입니다 :

MANAGERS 
id first_name last_name 
1 John  Doe 
2 Mary  Lewis 

USERS 
id first_name last_name manager 
1 Steve  Thompson 1 

이 정보는 데이터베이스에서 입력되는 사용자의 테이블 편집 양식을 만들었습니다, 대신 관리자의 수 있도록 내 SELECT 문에서 두 테이블에 합류했다. id가 표시되면 실제로 폼에 managers.first_name 및 managers.last_name이 표시됩니다.

그래서 내가하려는 것은 사용자가 ID 대신 이름을 제출하여 다른 사용자와 연결된 관리자를 편집 할 수 있도록 허용하지만 DB에서이를 ID에 다시 연결합니다. 우리에게는 많은 관리자가 있으므로 대부분의 사람들은 DB에있는 ID가 무엇인지 알지 못합니다. 그러나 그들은 모두 그들의 이름을 알고 있습니다. 따라서 SQL UPDATE 쿼리를 사용하여 달성 할 수 있습니다.

사용자에게서 볼 수 있듯이, 사용자 Steve Thompson은 관리자 1 (John Doe)이지만이 사용자의 관리자는 Mary Lewis로 변경해야합니다. 사용자 편집 양식에 'Mary Lewis'라는 이름을 어떻게 입력하고 관리자 ID 대신 관리자 이름을 사용하여 DB 테이블을 업데이트 할 수 있습니까?

여러 쿼리를 한 테이블에서 여러 테이블을 업데이트 할 수 없다고 말하는 사람들을 보았습니다.하지만이 테이블은 JOIN과 조금 다르지만 느껴집니다. 이것이 가능한지 아무도 알지 못합니까?

편집 나는이 하나를 볼 수 있으며 도움이 될 느낌이 ...하지만 제대로 구현하는 방법을 잘하지 않았다. 아마도 이것은 누군가를 도울 수 있습니까? 당신이 관리자 이름을 구문 분석 관리하고 처음으로 분할하고 마지막으로 이름이 그냥 부속

update USERS set 
    first_name = :user_first_name, 
    last_name = :user_last_name, 
    manager = (
    select id 
    from MANAGERS 
    where first_name = :manager_first_name 
     and last_name = :manager_last_name 
) 
where id = :user_id 

당신은 또한 (CROSS)를 사용할 수있는 관리자에게 id를 선택할 수 있습니다 후 Update one MySQL table with values from another

+0

사용자 행에 관리자가 1에서 2로 변경되기를 원한다고 말하는 것이 아닙니다.나에게 당신의 도전은 어떻게 UX에 집중하길 원하는가하는 것이다. 업데이트의 어려움이 없습니다. stmt – Drew

+0

폼의 관리자 이름을 사용하고 DB의 관련 ID가 관리자의 테이블에서 업데이트되도록하고 싶습니다. 이게 가능하다고 생각하니? –

+0

아, 다시 릿지 야. 너 거기서 나 한테 갔어. (당신이 삭제). 당신은 사용자 (스티브 톰)에 대해 이야기하기 시작했고 어떻게 자신의 관리자를 다른 사람으로 바꾸고 싶습니까? 서버에 어떻게 알리고 싶은지 의사 소통해야합니다. 사용자 1은 mgr 2로 변경됩니다. 그래서 나에게 그것은 UX의 도전입니다. 선택기처럼. SQL은 쉽습니다. – Drew

답변

1

는 가입 :

update USERS u 
cross join MANAGERS m 
set 
    u.first_name = :user_first_name, 
    u.last_name = :user_last_name, 
    u.manager = m.id, 
where u.id = :user_id 
    and m.first_name = :manager_first_name 
    and m.last_name = :manager_last_name 

관리자 이름이 고유하지 않은 경우 작동하지 않습니다. 해당 이름의 관리자가없는 경우에도 작동하지 않습니다.

그러나 나는 아마도 값으로 관리자 id과 함께 드롭 다운 선택을 사용할 것입니다. 당신은 여전히 ​​처음과 마지막 이름을 표시 할 수 있습니다

<select name="manager"> 
 
    <option value="1">John Doe</option> 
 
    <option value="2">Mary Lewis</option> 
 
</select>

이 방법 당신은 이름을 표시하지만 제출에 ID를 얻을.

+0

나는 그렇게하지 않을 것이다. 거기에서 일하는 7 명의 Mary Lewise를 가질 수 있습니다. – Drew

+0

그것은 훌륭한 포인트 드류입니다 ... 그리고 관리자 ID를 유지하는 것이 필요한 이유 중 하나. 해답을 주셔서 감사합니다. 폴 (Paul). –

+0

@Drew, 비즈니스 논리에 따르면 Mary Lewis라는 관리자가 여러 명있을 수는 없습니다. 즉, 하위 쿼리는 불필요하므로 그 중 하나를 수행하지 않을 것입니다.하지만 다른 이유가 있습니다. ;-) – Strawberry