我正在努力在我的网站上显示我的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'];
从所选表中获取“类型”列,还是有另一种方法可以执行此操作?
列名和表名由我使用的插件定义,因此名称不能更改。
答案 0 :(得分:22)
它无法工作的原因是因为(我自己认为)服务器对于如何正确处理列名称有点困惑。为了使它起作用,在每个具有您想要加入的名称的表以及列上添加别名,例如
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
假设您希望获取每个特定列的名称。
答案 1 :(得分:6)
在您SELECT
别名时给出您想拥有的列,例如:
SELECT `achievements`.`type` AS `Achieve-Type`
FROM `achievements`
现在您可以获得如下值:$rows['Achieve-Type'];
答案 2 :(得分:1)
使用...
对表名进行别名更容易SELECT * FROM achievements AS ac INNER JOIN stats as st
如果您愿意,您甚至可以对结果进行别名,这样当您从$rows