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'];
を使用して、選択したテーブルから列「タイプ」を取得できますか、それとも別の方法がありますか?
列とテーブルの名前は私が使用するプラグインによって定義されているため、名前を変更することはできません。
それが機能しない理由は、(私自身の意見では)サーバーが列名を適切に処理する方法について少し混乱しているためです。それが機能するために、結合したい同じ名前を持つすべてのテーブルと列にエイリアスを追加します。
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
特定の列ごとに名前を取得する。
例として、SELECT
するときに必要な列にエイリアスを指定します:
SELECT `achievements`.`type` AS `Achieve-Type`
FROM `achievements`
これで、次のような値を取得できます。$rows['Achieve-Type'];
テーブル名のエイリアスを作成する方が簡単です...
SELECT * FROM achievements AS ac INNER JOIN stats as st
必要に応じて結果にエイリアスを付けて、$rows
から結果を選択したときに区別しやすくすることもできます。