2016-06-18 5 views
0

Я видел, что есть похожие вопросы, но они, похоже, не помогают ... возможно, я не понимаю правильно и могу перевести свои примеры на свои нужды. Любая помощь приветствуется.PHP MySQL UPDATE join tables

Я пытаюсь преобразовать поле ввода в форме $ _POST в таблицу моих пользователей, в частности, на ключ менеджеров, от имени менеджеров (в форме) до идентификатора менеджеров (в БД). Позвольте мне показать пример.

Наша БД имеет (среди других таблиц) таблицу пользователей и имя менеджера. Таблица менеджеров имеет только идентификатор менеджера, сначала & фамилию. Таблица пользователей имеет свои собственные id, first_name, last_name и связанный идентификатор менеджера. Вот как это выглядит:

MANAGERS 
id first_name last_name 
1 John  Doe 
2 Mary  Lewis 

USERS 
id first_name last_name manager 
1 Steve  Thompson 1 

Я создал форму редактирования для пользователей таблицы, где этой информация вводятся из базы данных, но я присоединился две таблицы в моем ЗЕЬЕСТЕ так, что вместо менеджеров. id показывает, на самом деле он показывает менеджерам. имя_файла и manager.last_name в форме.

Так что я хочу, чтобы кто-то редактировал менеджера, связанного с пользователем, отправив свое имя вместо идентификатора, но в БД он связывает его с идентификатором. У нас много менеджеров, поэтому большинство людей не знают, что их идентификатор в БД. Однако все они знают свои имена. Таким образом, можно получить запрос SQL UPDATE:

Как вы можете видеть, у пользователя Steve Thompson есть менеджер 1 (John Doe), но менеджер этого пользователя должен быть изменен на Мэри Льюис. Как я могу ввести имя «Мэри Льюис» в «Форма редактирования пользователей» и обновить таблицу БД, используя имя менеджера, а не идентификатор менеджера.

Я видел, как люди говорят, что вы не можете обновлять несколько таблиц в одном запросе, но я чувствую, что это немного отличается, поскольку это больше похоже на JOIN, но я не уверен, как это сделать. Кто-нибудь знает, возможно ли это?

EDIT Я видел этот и чувствую, что может помочь ... но не уверен, как правильно реализовать. Возможно, это тоже поможет кому-то? Update one MySQL table with values from another

+0

Разве вы не говорите, что хотите, чтобы эта строка пользователя изменилась с 1 на 2?Для меня ваша задача - как вы хотите сосредоточиться на UX, чтобы это произошло. Не сложность обновления stmt – Drew

+0

Я просто хочу иметь возможность использовать имя менеджера в форме и обновить его в БД со своим ассоциированным ID из таблицы менеджера. Считаете ли вы, что это возможно? –

+0

А ты вернулся в Ридж. Ты ушел от меня туда. (Вы удалили). Вы начали говорить о пользователе (Steve Thom) и о том, как вы хотели изменить своего Mgr другому человеку. Вам нужно сообщить, как вы хотите сообщить серверу об этом. Как и пользователь 1 получает изменения в mgr 2. Так что для меня это проблема UX. Как выбор. Sql легко. – Drew

ответ

1

После удалось разобрать имя руководителей и разделить его на первое и последнее имя, которое вы можете просто выбрать менеджерам id в подвыборки

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 

Вы можете также использовать (крестик) РЕГИСТРИРУЙТЕСЬ:

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>

Таким образом, вы будете отображать имя, но получить идентификатор на кнопку.

+0

Я бы этого не сделал. У вас может работать семь Мэри Льюис. – Drew

+0

Это отличная точка Дрю ... и одна из причин того, что необходимо сохранить идентификатор менеджера. Спасибо за ответ Пол, я посмотрю, смогу ли я отработать здесь свою логику. –

+0

@Drew, бизнес-логика предполагает, что у вас не может быть нескольких менеджеров, которых называют Мэри Льюис. Тем не менее, подзапрос не нужен, поэтому я бы тоже этого не делал, но по другой причине. ;-) – Strawberry