如何用名称替换id号,因为列没有直接连接? (PHP / MySQL的)

时间:2011-08-13 04:42:47

标签: php mysql select join relational-database

假设您有一个包含两个名为“clients”和“referrals”的表的数据库。

TABLE客户端有两列:“id”和“name” TABLE引用也有两列:“id”和“referenced_by”

两个“id”列都是PRIMARY_KEYAUTO_INCREMENTNOT_NULL

TABLE客户端有三行:

1 | Jack  
2 | Frank  
3 | Hank  

TABLE引用也有三行:

1 | 0  
2 | 1  
3 | 2  

意思是,杰克是客户1并且没有人被推荐;弗兰克是客户2,被杰克推荐;汉克是弗兰克推荐的客户3。

我用来显示上述含义的SELECT命令是:

mysql_query("SELECT clients.id, clients.name, referrals.referred_by FROM clients INNER JOIN referrals ON clients.id=referrals.id");

while ($row = mysql_fetch_array($result))
{
    echo $row['id'] . " " . $row['name'] . " " . $row['referred_by'] . "<br>";
}

哪个输出:

1 Jack 0  
2 Frank 1  
3 Hank 2  

现在真正的问题是:

我应该如何修改代码,以便输出引荐来源的名称而不是其ID?

意思是,它应该是这样的:

1 Jack  
2 Frank Jack  
3 Hank Frank

提前致谢〜

编辑:请务必提及我应该如何更新数组,因为我对如何更新整个回声线感到迷失。

1 个答案:

答案 0 :(得分:4)

你几乎就在那里 - 你只需要第二次加入到客户表中以获得推荐人名称:

mysql_query("SELECT clients.id, clients.name, rclients.name as referred_by
FROM clients 
INNER JOIN referrals ON clients.id=referrals.id
LEFT JOIN clients as rclients ON referrals.referred_by = rclients.id");

while ($row = mysql_fetch_array($result))
{
    echo $row['id'] . " " . $row['name'] . " " . $row['referred_by'] . "<br>";
}