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

2022-08-30 23:06:08

我正在努力在我的网站上显示我的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);
}   

我是否能够使用并从所选表中获取列“类型”,或者是否有其他方法可以做到这一点?$rows['achievements.type'];$rows['stats.type'];

列和表名称由我使用的插件定义,因此名称无法更改。


答案 1

它不起作用的原因是(在我自己看来)服务器对如何正确处理列名有点困惑。为了使其正常工作,请在每个具有要连接的相同名称的表以及列上添加别名,例如

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

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


答案 2

例如,为您希望拥有的列提供别名:SELECT

SELECT `achievements`.`type` AS `Achieve-Type`
FROM `achievements`

现在,您可以获取如下值:$rows['Achieve-Type'];


推荐