mysql - 如何使用 SQL INNER JOIN 打印出名称而不是 ID
问题描述
其实我不知道我怎么能做到这一点,因为这是我第一次这样做。我的数据库中有 2 个表。
Table 1 users
Table 2 Transfer History.
这是我的代码:
SELECT u.id
, u.fname
, u.lname
, t.sender_id
, t.beneficiary_id
, t.amount
, t.date_posted
from transfers t
JOIN users u
ON u.id = t.sender_id
WHERE u.id = '".$id."'
ORDER
BY t.date_posted DESC
我使用
<?php $i = 1; while($row = ): ?>
<tr>
<td><?= $i++ ?></td>
<td><?= $row['sender'] ?></td>
<td><?= $row['sender'] ?></td>
<td><?= $i++ ?></td>
<td><?= $i++ ?></td>
</tr>
<?php endwhile ?>
我不想回显 beneficiary_id 我想从用户数据库中回显受益人姓名
解决方案
并不是每个人都知道,对于数据库,没有规定您只能将一个表连接到一个查询中一次。看起来您需要加入两次用户,一次用于发送付款的人,一次用于接收付款的人:
SELECT
su.fname as sender_fname,
su.lname as sender_lname,
bu.fname as beneficiary_fname,
bu.lname as beneficiary_lname,
t.sender_id,
t.beneficiary_id,
t.amount,
t.date_posted
FROM
transfers t
JOIN users su ON su.id = t.sender_id
JOIN users bu ON bu.id = t.beneficiary_id
WHERE su.id = '".$id."'
ORDER BY t.date_posted DESC
您的查询结果集现在包含发送者和接收者的名称,并且它们的别名不同,因此您可以使用别名在 php 中引用其中一个或另一个
重要的是要注意,您不能只提及一次用户表并使用 OR(您不能说ON u.id = t.sender_id OR u.id = t.beneficiary_id
),因为这会导致行数增加 - 每次传输您将获得两行。为了便于参考“这笔付款是从这个人发送给那个人”,您希望增加列数,而不是行数。对于 100 笔付款,您需要一个结果集,即“100 行两列;a from 和 a to”您不希望“一列的 200 行同时包含 from 和 to,在不同的行上”
推荐阅读
- php - PHP 列出 S3 存储桶中文件夹中的对象
- android - java.lang.RuntimeException: Unable to start activity ComponentInf 为什么?
- c# - 如何在 C# 的 Entity Framework Core 中加入 2 个表以使用 linq/lambda 表达式创建对象的新实例?
- python - _pickle.UnpicklingError: NEWOBJ 类参数不是类型对象
- scala - 重载方法过滤器
- javascript - 如何检查是否找到提到的成员?
- react-native - AccessibilityRole 在 React-Native 中不起作用,VoiceOver 不读取元素名称
- ng-bootstrap - 使用 ng-bootstrap Nav 的理由
- django - 测验通过时启用下载按钮
- qt - 如何使用 QSS 更改框架样式?