内连接具有相同列名的2个表

Lar*_*ein 13 php mysql inner-join

我正在努力在我的网站上显示我的Minecraft服务器的成就.但我无法让它发挥作用.

function achievements() {
    global $id;
    $sql="SELECT * FROM achievements
           INNER JOIN stats ON achievements.type=stats.type
           INNER JOIN stats ON achievements.block=stats.block
           INNER JOIN stats ON achievements.data=stats.data
           INNER JOIN stats ON achievements.value=stats.value
           WHERE player_id = $id";
    $result=mysql_query($sql) or die(mysql_error());
    $rows=mysql_fetch_array($result);
}   
Run Code Online (Sandbox Code Playgroud)

我是否可以使用$rows['achievements.type'];$rows['stats.type'];从选定的表中获取"类型"列,或者是否有另一种方法可以执行此操作?

列和表名由我使用的插件定义,因此名称不能更改.

Joh*_*Woo 23

它不起作用的原因是因为(在我看来)服务器对于如何正确处理列名称有点困惑.为了使它起作用,在每个具有您想要加入的名称的表以及列上添加别名,例如

SELECT  achievements.*,
        a.Name as TypeName,
        b.Name AS BlockName,
        c.Name as DataName,
        d.Name AS ValueName
FROM    achievements
        INNER JOIN stats a ON achievements.type = a.type
        INNER JOIN stats b ON achievements.block = b.block
        INNER JOIN stats c ON achievements.data = c.data
        INNER JOIN stats d ON achievements.value = d.value
WHERE   player_id = $id
Run Code Online (Sandbox Code Playgroud)

假设您想获取每个特定列的名称.


小智 6

给出你想拥有的列,而SELECT它们是别名,例如:

SELECT `achievements`.`type` AS `Achieve-Type`
FROM `achievements`
Run Code Online (Sandbox Code Playgroud)

现在你可以得到这样的值: $rows['Achieve-Type'];