【发布时间】:2016-04-22 23:48:27
【问题描述】:
我在使用 MySQL JOIN 时遇到问题,想知道是否有人可以帮助我。我正在加入的表格的快速概览。
User 表列(只是在这种情况下重要的列):
userId | active | role | username | addressId
Address 表列(只是在这种情况下重要的列):
addressId | firstName | lastName
ManagerRepRelationship表
repId | managerId
以下是这些表之间的关系:
创建新用户时,会为他们分配一个键 (userId),并且他们的地址信息会在地址中使用键 (addressId) 获得它自己的行。该 addressId 键与用户表中的用户行一起存储。
此外,在创建用户时,他们会被分配以下两个角色之一:“经理”或“代表”。如果他们是代表,则必须为他们分配一名经理(显然,需要先创建一些经理,然后才能创建任何代表)。当代表分配给经理并创建时,代表的
userID存储在repId列的ManagerRepRelationship中,同时为该代表选择的经理userId存储在同一行下managerId列。
这是我遇到的麻烦。在编辑代表时,我想在顶部呼应分配给该代表的经理的姓名。在编辑页面上,我在 url 中传递了编辑代表的userId,因此它可以与$_GET["userID'] 一起使用。
我似乎无法编写正确的 JOIN 语句来获取经理的名字和姓氏,而不是正在编辑的代表。这是我到目前为止所拥有的,但我得到了空值。我希望我解释得足够好。
<?php
$user_id = $_GET["userId"]; // the rep getting edited userId
// grab all the reps address info and user info
$user_result = mysqli_query( $connection,
"SELECT Users.*, Address.*
FROM Users
JOIN Address
ON Users.addressId=Address.addressId
WHERE Users.userId=" . $user_id
);
$user_set = mysqli_fetch_array($user_result);
// Trying to get the first and last name of the manager
// That is assigned to this rep
$result = mysqli_query( $connection,
"SELECT A.firstName, A.lastName
FROM Address A
JOIN Users U
ON A.addressId=U.addressId
JOIN ManagerRepRelationship M
ON M.repId=U.userId AND M.managerID=U.userId
WHERE U.role='manager' AND M.repId=" . $user_id
);
$managerName = mysqli_fetch_array($result);
?>
【问题讨论】:
-
哎呀抱歉。 1秒。我需要编辑这个。
-
您的
User表和您的Address表之间的外键关系是向后的。如果您希望在用户和地址之间建立 1:many 关系,您的Address表应该有一个userId列,而User表应该不有一个addressId列。想一想:如果您的addressId列在User表中不可为空,并且强制执行外键,则您需要在插入用户之前插入用户地址,这绝对是感觉向后。