连接足球网站的表格和数据

时间:2018-11-11 19:24:33

标签: php mysql

我正在学习PHP,目前正在为本地足球俱乐部创建一个网站。 他们有不同年龄段的多个团队。我创建了一个“团队”数据库,其中包含有关球队名称,联赛,球队照片,训练信息的所有信息。我也有一个“教练”表,其中包括姓名,职业,资格和联系方式。我将如何添加要在链接两者的表中显示的信息。

因此,在“ coach1”和“ coach2”中,它将显示与该俱乐部链接的两名教练的姓名。

我认为,当我(通过表格)创建新教练时,他们将能够通过下拉框从数据库中选择球队。

当教练签约并从下拉列表中选择他们的团队时,将其链接在一起的最佳方法是什么。它们是链接的。但是有些团队有两名教练,我猜想选择该团队的第二位教练会覆盖前一位,您如何将其添加为另一位教练?我以为我会添加一个额外的下拉列表,以在“角色”列中填写“经理”或“助理”,然后我必须在“选择教练的位置=助理且id = $ id”的字段中添加

          <table class="table">
            <thead>
              <tr>
                <th>Team Name</th>
                <th>Training</th>
                <th>League</th>
                <th>Coaches</th>
                <th></th>
                <th></th>
              </tr>
            </thead>
            <tbody>
<?php
    $no     = 1;
    $total  = 0;
    while ($row = mysqli_fetch_array($team)) 
    {
        echo '<tr>
                <td>'." u".$row['age_group']." ".$row['team_name'].'</td> 
                <td>'.$row['training_day'].", ".$row['location']." at ".$row['training_time'].'</td>
                <td>'.$row['league']." - ".$row['match_day'].'</td> 
                <td>'.$row['coach1'].'</td> 
                <td>'.$row['coach2'].'</td>
                <td><a href="viewapp.php?id='.($row['team_id']).'" class="btn btn-warning pull-right btn-xs">View</a></td> 
                </tr>';    
        $no++;
    }?>
</tbody>
          </table>

2 个答案:

答案 0 :(得分:0)

您可以在两个表之间使用外键来连接信息。例如,在“ coachs”表中添加名为team_id之类的列。此列应具有“团队”表中的团队ID。

然后,当您以表格形式注册新教练时,可以使用ID作为下拉列表中的值。

答案 1 :(得分:0)

由于它仅是数据库设计,因此我们来解决这个问题。

您有教练和团队。


情况1:一位教练可以属于1个团队

独特教练属于独特团队(这是1,1关系)

一个独特团队可以拥有一个或多个教练。 (这是1,n关系)

我们可以这样绘制这些实体的关系模式:

  

[coach]-(1,1)-> [coach_team] <-(1,n)-[team]

在这种关系中,团队的外键将存储在coach表中

举例来说,我有两个团队,分别是 foo bar 。还有3位教练,分别是约翰·史密斯(John Smith),詹姆·杜(Jane Doe)和辛尼丁·齐达内(Zinedine Zidane)。约翰(John)和简(Jane)是 foo 团队的教练,齐达内(Zidane)是团队酒吧的教练。

让我们考虑表team有2个字段idname,而表coach有3个字段idnameteam_id。我们可以这样构建表:

CREATE TABLE team
(
  id INT(6) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(255) NOT NULL
);

CREATE TABLE coach
(
  id INT(6) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(255) NOT NULL,
  team_id INT(6) NOT NULL,
  CONSTRAINT FOREIGN KEY(team_id) REFERENCES team(id)
);

INSERT INTO team VALUES (default, "foo"), (default, "bar");

INSERT INTO coach VALUES (default, "John Smith", 1), (default, "Jane Doe", 1), (default, "Zinedine Zidane", 2);

我怎么知道团队 foo 的教练是谁?在外键上使用JOIN

SELECT t.name AS "Team name", c.name AS "Coach name"
FROM team t
INNER JOIN coach c
ON c.team_id = t.id
WHERE t.name = "foo";

结果

| Team name | Coach name |
+-----------+------------+
| foo       | John Smith |
| foo       | Jane Doe   |

我怎么知道齐达内执教的球队是什么?使用相同的查询,只有WHERE子句会更改:

SELECT t.name AS "Team name", c.name AS "Coach name"
FROM team t
INNER JOIN coach c
ON c.team_id = t.id
WHERE c.name = "Zinedine Zidane";

结果

| Team name | Coach name      |
+-----------+-----------------+
| bar       | Zinedine Zidane |

您可以自己在DB Fiddle上尝试


情况2:一个教练可以属于n队

唯一教练属于一个或多个团队(这是1,n关系)

一个独特团队可以拥有一个或多个教练。 (这是1,n关系)

我们可以这样绘制这些实体的关系模式:

  

[coach]-(1,n)-> [coach_team] <-(1,n)-[team]

在这种关系中,需要一个新表coach_team,其中将存储教练和团队的外键。为了避免重复教练/团队,我更喜欢将PRIMARY KEY声明为两个外键的组合。

举例来说,我有3个团队,分别是 foo bar 42队。还有3位教练,分别是约翰·史密斯(John Smith),詹姆·杜(Jane Doe)和辛尼丁·齐达内(Zinedine Zidane)。约翰(John)和简(Jane)是 foo 队的教练,齐达内(Zidane)是车队酒吧的教练,而第42队由齐达内(Jidane)和简(Jane)担任教练。

教练

 id | name
----+-----------------
 1  | John Smith
 2  | Jane Doe
 3  | Zinedine Zidane

团队

 id | name
----+--------
 1  | foo
 2  | bar
 3  | team 42

coach_team

 coach_id | name_id
----------+---------
 1        | 1
 2        | 1
 3        | 2
 2        | 3
 3        | 3

表格创建

CREATE TABLE team
(
  id INT(6) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(255) NOT NULL
);

CREATE TABLE coach
(
  id INT(6) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(255) NOT NULL
);

CREATE TABLE coach_team
(
  coach_id INT(6) NOT NULL,
  team_id INT(6) NOT NULL,
  CONSTRAINT FOREIGN KEY(coach_id) REFERENCES coach(id),
  CONSTRAINT FOREIGN KEY(team_id) REFERENCES team(id),
  PRIMARY KEY (coach_id, team_id)
);

INSERT INTO team VALUES (default, "foo"), (default, "bar"), (default, "Team 42");

INSERT INTO coach VALUES (default, "John Smith"), (default, "Jane Doe"), (default, "Zinedine Zidane");

INSERT INTO coach_team VALUES (1, 1), (2, 1), (3, 2), (2, 3), (3, 3);

如何获得 foo 团队的教练?我先在参考表JOIN上查询团队coach_team,然后在桌上教练查询另一个JOIN

SELECT t.name AS "Team name", c.name AS "Coach name"
FROM team t
INNER JOIN coach_team ct
ON ct.team_id = t.id
INNER JOIN coach c
ON ct.coach_id = c.id
WHERE t.name="foo";

结果

| Team name | Coach name |
+-----------+------------+
| foo       | John Smith |
| foo       | Jane Doe   |

我怎么知道齐达内执教的球队是什么?使用相同的查询,只有WHERE子句会更改:

SELECT t.name AS "Team name", c.name AS "Coach name"
FROM team t
INNER JOIN coach_team ct
ON ct.team_id = t.id
INNER JOIN coach c
ON ct.coach_id = c.id
WHERE c.name="Zinedine Zidane";

结果

| Team name | Coach name      |
+-----------+-----------------+
| bar       | Zinedine Zidane |
| Team 42   | Zinedine Zidane |

您可以自己在DB Fiddle上尝试