繁体   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