Gegevens uit andere tabel gebruiken
Ik heb een WK database met 29 tabellen waarin data zitten. (1930 t/m 2018, 2022 Qatar komt er nog aan). Tussen de tabellen zitten FOREIGN KEYS voor ID's.
Ik wil graag deze data presenteren op een website (via PHP script) en dat lukt prima als het gaat om één tabel.
In verschillende tabellen zitten team_id's weergeven als T-80 i.p.v. de naam van het team. In de teams tabel staat T-80 voor Uruguay (teams.team_name)
Op welke manier kan ik de team naam (team_name) laten verschijnen op de pagina tour.php welke komt uit de andere tabel teams.team_name?
Hieronder de twee PHP pagina's als URL. De tabellen op de pagina komen exact overeen met de tabelstructuur namen.
Pagina (tabel) tournament_standings (https://voetbalmatch.eu/tour.php)
Pagina (tabel) teams (https://voetbalmatch.eu/teams.php)
P.s. als iemand interesse heeft in de WK data dan kan ik een SQL script sturen welke je zo kunt inladen in PhPMyAdmin. Stuur mij een DM ;-)
Deel van HTML/PHP code van tour.php
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<table class="table table-bordered">
<thead>
<tr>
<th>tournament_id</th>
<th>position</th>
<th>team_id</th>
</tr>
</thead>
<tbody>
<?php
$con = mysqli_connect('db.voetbalmatch.eu', 'mdxxx', 'xxxxxxxxx', 'mdxxx');
$query = "SELECT *
FROM tournament_standings
WHERE position < '4'
ORDER BY tournament_id ASC";
$query_run = mysqli_query($con, $query);
if(mysqli_num_rows($query_run) > 0)
{
foreach($query_run as $row)
{
?>
<tr>
<td><?= $row['tournament_id']; ?></td>
<td><?= $row['position']; ?></td>
<td><?= $row['team_id']; ?></td>
</tr>
<?php
}
}
else
{
?>
<tr>
<td colspan="4">No Record Found</td>
</tr>
<?php
}
?>
</tbody>
</table>
<thead>
<tr>
<th>tournament_id</th>
<th>position</th>
<th>team_id</th>
</tr>
</thead>
<tbody>
<?php
$con = mysqli_connect('db.voetbalmatch.eu', 'mdxxx', 'xxxxxxxxx', 'mdxxx');
$query = "SELECT *
FROM tournament_standings
WHERE position < '4'
ORDER BY tournament_id ASC";
$query_run = mysqli_query($con, $query);
if(mysqli_num_rows($query_run) > 0)
{
foreach($query_run as $row)
{
?>
<tr>
<td><?= $row['tournament_id']; ?></td>
<td><?= $row['position']; ?></td>
<td><?= $row['team_id']; ?></td>
</tr>
<?php
}
}
else
{
?>
<tr>
<td colspan="4">No Record Found</td>
</tr>
<?php
}
?>
</tbody>
</table>
Deel van HTML/PHP code van teams.php
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<table class="table table-bordered">
<thead>
<tr>
<th>team_id</th>
<th>team_name</th>
<th>team_code</th>
<th>federation_name</th>
<th>region_name</th>
<th>confederation_id</th>
<th>team_wikipedia_link</th>
<th>federation_wikipedia_link</th>
</tr>
</thead>
<tbody>
<?php
$con = mysqli_connect('db.voetbalmatch.eu', 'mdxxx', 'xxxxxxxxx', 'mdxxx');
$query = "SELECT * FROM teams";
$query_run = mysqli_query($con, $query);
if(mysqli_num_rows($query_run) > 0)
{
foreach($query_run as $row)
{
?>
<tr>
<td><?= $row['team_id']; ?></td>
<td><?= $row['team_name']; ?></td>
<td><?= $row['team_code']; ?></td>
<td><?= $row['federation_name']; ?></td>
<td><?= $row['region_name']; ?></td>
<td><?= $row['confederation_id']; ?></td>
<td><?= $row['team_wikipedia_link']; ?></td>
<td><?= $row['federation_wikipedia_link']; ?></td>
</tr>
<?php
}
}
else
{
?>
<tr>
<td colspan="4">No Record Found</td>
</tr>
<?php
}
?>
</tbody>
</table>
<thead>
<tr>
<th>team_id</th>
<th>team_name</th>
<th>team_code</th>
<th>federation_name</th>
<th>region_name</th>
<th>confederation_id</th>
<th>team_wikipedia_link</th>
<th>federation_wikipedia_link</th>
</tr>
</thead>
<tbody>
<?php
$con = mysqli_connect('db.voetbalmatch.eu', 'mdxxx', 'xxxxxxxxx', 'mdxxx');
$query = "SELECT * FROM teams";
$query_run = mysqli_query($con, $query);
if(mysqli_num_rows($query_run) > 0)
{
foreach($query_run as $row)
{
?>
<tr>
<td><?= $row['team_id']; ?></td>
<td><?= $row['team_name']; ?></td>
<td><?= $row['team_code']; ?></td>
<td><?= $row['federation_name']; ?></td>
<td><?= $row['region_name']; ?></td>
<td><?= $row['confederation_id']; ?></td>
<td><?= $row['team_wikipedia_link']; ?></td>
<td><?= $row['federation_wikipedia_link']; ?></td>
</tr>
<?php
}
}
else
{
?>
<tr>
<td colspan="4">No Record Found</td>
</tr>
<?php
}
?>
</tbody>
</table>
Gewijzigd op 29/12/2022 08:46:13 door Marcel Vuuren
Adoptive Solution op 29/12/2022 10:29:33:
Dank, gelukt!
Gewijzigd op 29/12/2022 16:57:40 door Marcel Vuuren
Is 1 tabel met een extra kolom "jaartal" niet eenvoudiger?
Ivo P op 02/01/2023 13:15:05:
"Ik heb een WK database met 29 tabellen waarin data zitten. (1930 t/m 2018, 2022 Qatar komt er nog aan)"
Is 1 tabel met een extra kolom "jaartal" niet eenvoudiger?
Is 1 tabel met een extra kolom "jaartal" niet eenvoudiger?
Nee, in dit geval niet.
Met welke reden?
- Ariën - op 09/01/2023 14:38:20:
Met welke reden?
Verschillende tabellen hebben verwijzingen naar andere tabellen, zoals tournament_id, year, team_name, team_country_code, player_name, player_country, etc. Deze zijn verbonden met verschillende FOREIGN KEYS
Je kan natuurlijk een kolom jaar erbij maken, maar er is niet voor niets een relationele database gemaakt. Wanneer je de database structuur en de data kent is een kolom jaar niet nodig als je INNER JOINS gebruikt lost dit zichzelf op.
Ik lever met alle liefde de datafile voor het inladen in PHPmyAdmin (tabellen en data) aan voor meer inzage in de structuur.
Daarmee is het mogelijk om vanaf de start te kunnen werken met de database, zonder tussentijds tabellen of kolommen toe te moeten voegen.
Elk jaar de developer erbij roepen omdat er voor het nieuwe jaar een set tabellen moet worden toegevoegd, is een no-go.
Jij doet nu kennelijk zo iets als je de uitslagen van 2022 wilt zien:
SELECT * FROM uitslagen_2022;
Ik zou doen:
SELECT * FROM uitslagen WHERE jaar = 2022;
Of,
SELECT uitslagen.*
FROM uitslagen
JOIN competitie ON competitie.id = uitslagen.competitie_id AND competitie.naam = 'WK 2022';
Daarmee zou je zelfs EK uitslagen in dezelfde tabel kwijt kunnen.
Dat heeft niets te maken met de relaties naar de tabellen teams.
En welke speler in welk jaar mee deed in een team, kun je ook opnemen in een koppeltabel.
Daarmee geef je dan aan dat speler_id = 123 meedeed bij team_id = 31 in het jaar 1974 en ook een keer in 1976
Maar nogmaals: een struktuur blijft ongewijzigd door de tijd. (tenzij je features toevoegt natuurlijk, maar "nieuw jaar" is geen nieuwe feature).