我正在学习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>发布于 2018-11-12 08:54:16
因为它只是DB设计,所以让我们来解决这个问题。
你有教练和团队。
案例1:教练可以属于1支球队
唯一的教练属于唯一的球队(这是1,1种关系)
一个独特的团队可以有一个或多个教练。(这是1,n关系)
我们可以这样绘制这些实体的关系模式:
教练-(1,1)-> coach_team <-(1,n)-队
在这种关系中,团队的外键将存储在coach表中。
举个例子,我有两个队,foo和bar。还有三位教练,约翰·史密斯、简·多伊和齐达内。约翰和简是球队的教练,福和齐达内是球队的教练。
让我们考虑表team有两个字段,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);我怎么知道谁是足球队的教练?在外键上使用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关系)
我们可以这样绘制这些实体的关系模式:
教练-(1,n)-> coach_team <-(1,n)-队
在这种关系中,需要一个新的表coach_team,其中将存储教练和球队的外键。为了避免夫妻教练/团队的重复,我更喜欢将PRIMARY KEY声明为两个外键的组合。
举个例子,我有3个队,foo,bar和team 42。还有三位教练,约翰·史密斯、简·多伊和齐达内。约翰和简是福队的教练,齐达内是球队的教练,42队的教练是齐达内和简。
Coach
id | name
----+-----------------
1 | John Smith
2 | Jane Doe
3 | Zinedine ZidaneTeam
id | name
----+--------
1 | foo
2 | bar
3 | team 42coach_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);我怎样才能得到球队的教练呢?我查询团队,参考表上的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上试试
发布于 2018-11-11 19:45:42
您可以在两个表之间使用外键连接信息。例如,在“教练”表中添加一个名为team_id的列。该列应该具有“team”表中的团队id。
然后,当您在表单中注册一个新教练时,您可以使用id作为下拉列表中的值。
https://stackoverflow.com/questions/53252344
复制相似问题