我正在尝试使用php在我的网站上显示来自两个不同mysql表的数据。
我的目标是显示一个匹配时间表,其中包含来自两个表的信息。第一个包括所有团队及其ID,第二个包括游戏的所有细节。我现在想用第一个表中的相应团队名称“替换”“home_id”和“away_id”字段。
表格如下:
table "teams"
id name
-----------
1 Team 1
2 Team 2
3 Team 3
4 Team 4
...
table "matchschedule"
id home_id away_id goals_home goals_away date
1 1 2 0 2 2016-05-05
2 3 4 2 1 2016-05-06
...
使用以下查询我在phpmyadmin中获取所需数据:
SELECT
date, home.name, sp.goals_home, away.name, sp.goals_away
FROM
matchschedule sp
INNER JOIN
teams home on sp.home = home.id
LEFT JOIN
teams away on sp.away = away.id
但是,当我在我的网站中实现此查询并添加下面的代码来显示数据时,字段“home.name”和“away.name”始终为空。为了显示团队名称,我需要更改什么?
while($row = mysql_fetch_array($query)) {
?>
<table border=1>
<tr>
<?php
echo "<td>".$row['date']."</td>";
echo "<td>".$row['home.name']."</td>";
echo "<td>".$row['goals_home']."</td>";
echo "<td>".$row['away.name']."</td>";
echo "<td>".$row['goals_away']."</td>";
?>
</tr>
</table>
最终结果(两个团队名称缺少信息):
2016-05-05 [] 0 [] 2
2016-05-06 [] 2 [] 1
答案 0 :(得分:1)
问题是,在查询中,您请求home.name
mysql返回标题为name
的php列,并且您无法再使用home.name
到达该列。同样适用于away.name
。
这就是为什么你需要为返回的列设置正确的名称。
将您的查询更改为:
SELECT
date, home.name home_name, sp.goals_home, away.name away_name, sp.goals_away
FROM
matchschedule sp
INNER JOIN
teams home on sp.home = home.id
LEFT JOIN
teams away on sp.away = away.id
并在php中调用这些列,如:
echo "<td>".$row['date']."</td>";
echo "<td>".$row['home_name']."</td>";
echo "<td>".$row['goals_home']."</td>";
echo "<td>".$row['away_name']."</td>";
echo "<td>".$row['goals_away']."</td>";
答案 1 :(得分:1)
根据您的表格结构,您应该执行以下操作:
SELECT
date, home.name AS homeName, sp.goals_home, away.name AS awayName, sp.goals_away
FROM
matchschedule sp
INNER JOIN
teams home on sp.home_id = home.id
LEFT JOIN
teams away on sp.away_id = away.id
所以基本上用 sp.home_id 替换 sp.home ,用 sp.away_id 替换 sp.away 更改字段名称,因为表中的字段名称相同。