繁体   English   中英

根据外键获取另一列的值

[英]Get value of another column based on foreign key

我正在为Web应用程序中的管理员在视图中显示表中的所有数据。

SQL看起来像这样:

$organizations = $db->query("
    SELECT id, organization_name, owner_id
    FROM organizations
    ORDER BY created_on DESC
  ")->fetchALL(PDO::FETCH_ASSOC);

我正在使用的部分视图如下:

<?php foreach($organizations as $organization): ?>
   <tr>
     <td><?php echo e($organization['organization_name']); ?></td>
     <td><?php echo e($organization['owner_id']); ?></td>
   </tr>
<?php endforeach; ?>

这完全按预期工作,但实际上不是我想要显示的owner_idusers表的int和主键)

这将生成一个包含SQL语句中所有值的表,并且特别是它将把owner_id呈现给视图,该视图是与我的users表相关的外键。

我要做的实际上是显示属于owner_id的所有者的name ,而不是仅显示id (即32)。 如何根据引用的外键user_idusers表中显示用户的关联name

您可以使用JOIN

$organizations = $db->query("
    SELECT organizations.id, organizations.organization_name, 
    users.user_name
    FROM organizations
    JOIN users ON organizations.owner_id = users.user_id
    ORDER BY organizations.created_on DESC
  ")->fetchALL(PDO::FETCH_ASSOC);

然后来看,它可以用作

<?php foreach($organizations as $organization): ?>
   <tr>
     <td><?php echo e($organization['organization_name']); ?></td>
     <td><?php echo e($organization['user_name']); ?></td>
   </tr>
<?php endforeach; ?>  

您需要使用JOIN链接两个表。 下面的示例在owner_id上链接两个表,并在结果中包含user_name 如果两个表中都存在任何列名,则需要在SELECT中使用别名。

-- use alias and include user_name
SELECT o.id, o.organization_name, u.user_id, u.user_name 
-- alias the table as "o"
FROM organizations o 
-- alias the table as "u"
JOIN users u 
    -- link the tables here on owner_id
    ON o.owner_id = u.user_id 
ORDER BY o.created_on DESC

然后,您可以像这样在PHP中输出user_name列的值:

<td><?php echo e($organization['user_name']); ?></td>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM