使用php

时间:2016-06-21 13:46:45

标签: php mysql join

我正在尝试使用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

2 个答案:

答案 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 更改字段名称,因为表中的字段名称相同。