簡體   English   中英

PHP MySQL UPDATE連接表

[英]PHP MySQL UPDATE join tables

我已經看到有類似的問題,但是它們似乎並沒有幫助...可能只是我沒有正確理解並且無法將其示例轉換為我的需求。 任何幫助表示贊賞。

我試圖將$ _POST表單上的輸入字段轉換為我的用戶表,特別是在經理鍵上,從經理名稱(在表單中)轉換為經理ID(在數據庫中)。 讓我舉一個例子。

我們的數據庫(除其他表外)具有一個用戶表和一個管理者名稱。 經理表僅包含經理的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語句中加入了兩個表,因此實際上沒有顯示manager.id,而是顯示了manager.first_name和manager。表單中的last_name。

所以我想做的是允許某人編輯與用戶關聯的經理,方法是提交其姓名而不是ID,但是在數據庫中它將其關聯回ID。 我們有很多經理,所以大多數人都不知道他們在數據庫中的ID是什么。 但是,他們都知道他們的名字。 因此,可以通過SQL UPDATE查詢來實現:

如您所見,用戶史蒂夫·湯普森(Steve Thompson)擁有經理1(John Doe),但是該用戶的經理需要更改為Mary Lewis。 如何在“用戶編輯表單”中輸入名稱“ Mary Lewis”,並使用管理員的名稱而不是管理員的ID來更新數據庫表。

我見過有人說您不能在一個查詢中更新多個表,但是我覺得這有點不同,因為它更像是JOIN,但是我不確定該怎么做。 有人知道這是否可能嗎?

編輯我已經看到了這一點,並認為它可能會有所幫助...但不確定如何正確實施。 也許這也可以幫助某人? 用另一個MySQL表更新一個MySQL表

在成功解析經理姓名並將其拆分為名字和姓氏之后,您只需在子選擇中選擇經理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> 

這樣,您將顯示名稱,但在提交時獲得ID。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM