首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >连接足球/足球网站的表格和数据

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

Stack Overflow用户
提问于 2018-11-11 19:24:33
回答 2查看 346关注 0票数 1

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

因此,在“coach1”和“coach2”中,将显示与该俱乐部有关联的两名教练的名字。

我在想,当我创建一个新的教练(通过表单),他们将能够选择从数据库通过一个下拉框。

当一名教练报名的时候,从下拉队中挑选出他们的球队,怎样才是最好的办法把他们联系在一起。它们是有联系的。但有些球队有两名教练,我猜第二名教练选择球队后会覆盖前一支球队,你会怎么增加这位教练呢?我想我会添加一个额外的下拉列表,在“角色”一栏中填写“经理”或“助理”,然后我必须添加“选择教练”字段,其中“选择教练角色=助理和id =$id”。

代码语言:javascript
运行
复制
          <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>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-12 08:54:16

因为它只是DB设计,所以让我们来解决这个问题。

你有教练和团队。

案例1:教练可以属于1支球队

唯一的教练属于唯一的球队(这是1,1种关系)

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

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

教练-(1,1)-> coach_team <-(1,n)-队

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

举个例子,我有两个队,foo和bar。还有三位教练,约翰·史密斯、简·多伊和齐达内。约翰和简是球队的教练,福和齐达内是球队的教练。

让我们考虑表team有两个字段,idname,而表coach有3个字段,idnameteam_id。我们可以用这种方式构建表格:

代码语言:javascript
运行
复制
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);

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

代码语言:javascript
运行
复制
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";

结果

代码语言:javascript
运行
复制
| Team name | Coach name |
+-----------+------------+
| foo       | John Smith |
| foo       | Jane Doe   |

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

代码语言:javascript
运行
复制
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";

结果

代码语言:javascript
运行
复制
| Team name | Coach name      |
+-----------+-----------------+
| bar       | Zinedine Zidane |

你可以自己在DB Fiddle上试试

案例2:教练可以属于n队。

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

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

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

教练-(1,n)-> coach_team <-(1,n)-队

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

举个例子,我有3个队,foo,bar和team 42。还有三位教练,约翰·史密斯、简·多伊和齐达内。约翰和简是福队的教练,齐达内是球队的教练,42队的教练是齐达内和简。

Coach

代码语言:javascript
运行
复制
 id | name
----+-----------------
 1  | John Smith
 2  | Jane Doe
 3  | Zinedine Zidane

Team

代码语言:javascript
运行
复制
 id | name
----+--------
 1  | foo
 2  | bar
 3  | team 42

coach_team

代码语言:javascript
运行
复制
 coach_id | name_id
----------+---------
 1        | 1
 2        | 1
 3        | 2
 2        | 3
 3        | 3

表创建

代码语言:javascript
运行
复制
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);

我怎样才能得到球队的教练呢?我查询团队,参考表上的JOINcoach_team,以及表教练上的另一个JOIN

代码语言:javascript
运行
复制
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";

结果

代码语言:javascript
运行
复制
| Team name | Coach name |
+-----------+------------+
| foo       | John Smith |
| foo       | Jane Doe   |

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

代码语言:javascript
运行
复制
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";

结果

代码语言:javascript
运行
复制
| Team name | Coach name      |
+-----------+-----------------+
| bar       | Zinedine Zidane |
| Team 42   | Zinedine Zidane |

你可以自己在DB Fiddle上试试

票数 0
EN

Stack Overflow用户

发布于 2018-11-11 19:45:42

您可以在两个表之间使用外键连接信息。例如,在“教练”表中添加一个名为team_id的列。该列应该具有“team”表中的团队id。

然后,当您在表单中注册一个新教练时,您可以使用id作为下拉列表中的值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53252344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档