我正在学习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>
答案 0 :(得分:0)
您可以在两个表之间使用外键来连接信息。例如,在“ coachs”表中添加名为team_id之类的列。此列应具有“团队”表中的团队ID。
然后,当您以表格形式注册新教练时,可以使用ID作为下拉列表中的值。
答案 1 :(得分:0)
由于它仅是数据库设计,因此我们来解决这个问题。
您有教练和团队。
独特教练属于独特团队(这是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个字段id
和name
,而表coach
有3个字段id
,name
和team_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上尝试
唯一教练属于一个或多个团队(这是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上尝试