【问题标题】:Inner join multiple times on same table on same column在同一列的同一张表上多次内连接
【发布时间】:2020-04-29 18:34:27
【问题描述】:

我有两个 mySQL 表:

1: id、agent、promoter、promoterrank、prevrank、newrank、promotiontime

2:id,排名

newrank 和promoter rank 是与表2 中的ID 对应的INTS(例如:Trainee = 2、Supervisor = 4 等...)

我正在尝试以一种可以显示等级的实际名称而不是与等级相关的 ID 的方式将 A 与 B 进行 INNER JOIN。我已经成功地为 newrank 做到了这一点,但无论我尝试为promoterrank 做什么,它都不起作用。感谢所有帮助。

这是我使用的 SQL 查询:

SELECT A.*,B.rank as brank,DATE_FORMAT(promotiontime, '%Y-%m-%dT%H:%i:%s0Z') FROM promotions A 
INNER JOIN ranks B ON A.newrank = B.id 
WHERE agent='".$_POST['agent']."' ORDER BY id DESC

还有我的 PHP:

<td><?php echo $row['brank']; ?></td>
<td><a href="profile.php?user=<?php echo $row['promoter']; ?>"><?php echo $row['promoter']; ?></a></td>
<td><?php echo $row['promoterrank']; ?></td>

【问题讨论】:

  • 你的代码对sql注入开放;使用准备好的语句。
  • @FunkFortyNiner 我最终会的,目前只是在学习。谢谢

标签: php mysql inner-join


【解决方案1】:

您想解码两个等级值(一个用于 newrank,一个用于promoterrank),那么您应该两次加入该表等级,例如:

    SELECT A.*
      , B.rank as newrank
      , C.rank as promoterrank
      DATE_FORMAT(promotiontime, '%Y-%m-%dT%H:%i:%s0Z') 
    FROM promotions A 
    INNER JOIN ranks B ON A.newrank = B.id 
    INNER JOIN ranks C ON A.promoterrank = C.id
    WHERE agent='".$_POST['agent']."' ORDER BY id DESC

无论如何,你应该避免在 sql 代码中使用 php var ..(你有 sqlinjection 的风险)所以看看准备好的语句和绑定参数

【讨论】:

  • 完美运行,谢谢。我几乎可以肯定我已经尝试过了,但似乎没有。非常感谢
  • 请注意,这同样容易受到攻击