17

Minecraft サーバーからの成果を自分の Web サイトに表示する作業を行っています。しかし、私はそれを機能させることができません。

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'];

列とテーブルの名前は、使用するプラグインによって定義されるため、名前を変更することはできません。

4

3 に答える 3

28

それが機能しない理由は、(私自身の意見では)サーバーが列名を適切に処理する方法について少し混乱しているためです。機能させるには、結合したい同じ名前のすべてのテーブルと列にエイリアスを追加します。

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

特定のすべての列の名前を取得したいとします。

于 2013-04-25T11:09:39.037 に答える
6

SELECT例として、エイリアスを使用している間に保持したい列を指定します。

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

これで、次のような値を取得できます。$rows['Achieve-Type'];

于 2013-04-25T11:08:25.310 に答える
1

テーブル名にエイリアスを付ける方が簡単です...

SELECT * FROM achievements AS ac INNER JOIN stats as st

必要に応じて結果にエイリアスを設定することもできます。$rows

于 2013-04-25T11:07:51.263 に答える