PHP Joinen van variabelen
ik ben tegen tijdens het programeren tegen een probleem aangelopen. Ik wou eens wat testen met joins.
Ik heb 3 tabellen in mijn MySQL database: `a5852590_1`.`Atleten`, `a5852590_1`.`Disciplines` & `a5852590_1`.`Beker van Vlaanderen`
In tabel `a5852590_1`.`Beker van Vlaanderen` zijn er de kolommen id, id_atleet, id_discipline1, id_discipline2, id_discipline3
In tabel `a5852590_1`.`Disciplines` zijn er de kolommen id, Naam
In tabel `a5852590_1`.`Atleten` zijn er de kolommen id, Naam, Voornaam
Dus ik moet eerst alle gegevens uit tabel 1 (`a5852590_1`.`Beker van Vlaanderen`) halen. Daarna wil ik:
`Atleten`.`Naam`, `Atleten`.`Voornaam` FROM `a5852590_1`.`Atleten` WHERE `Atleten`.`id`=`Beker van Vlaanderen`.`id_atleet`
Voor elke ingevulde id_discipline [1,2,3] => `Discipline`.`Naam` FROM `a5852590_1`.`Disciplines` WHERE `Disciplines`.`id`=`Beker van Vlaanderen`.`id_discipline [1,2 of 3]`
Ik heb dit geprobeerd met:
$sql = "SELECT `Beker van Vlaanderen`.`id_atleet`, `Beker van Vlaanderen`.`id_discipline1`, `Disciplines`.`id`, `Disciplines`.`Naam`, `Atleten`.`id`
FROM `a5852590_1`.`Atleten`, `a5852590_1`.`Disciplines`, `a5852590_1`.`Beker van Vlaanderen`
WHERE `Disciplines`.`id`=`Beker van Vlaanderen`.`id_discipline1` OR `Disciplines`.`id`=`Beker van Vlaanderen`.`id_discipline2` OR `Disciplines`.`id`=`Beker van Vlaanderen`.`id_discipline3`
Dit lukt echter niet, volgens mij omdat de kolomnamen Naam in tabel Atleten en tabel Disciplines dezelfde zijn.
Wie kent er een oplossing voor mijn probleem?
Groetjes,
Olivier
Watvoor result krijg je?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
SELECT
bvv.id_atleet,
d1.naam AS d1naam,
d2.naam AS d2naam,
d3.naam AS d3naam,
a.naam
FROM
beker_van_vlaanderen AS bvv
JOIN disciplines AS d1 ON d1.id = bvv.id_discipline1
JOIN disciplines AS d2 ON d2.id = bvv.id_discipline2
JOIN disciplines AS d3 ON d3.id = bvv.id_discipline3
JOIN atleten AS a ON a.id = bvv.id_atleet
bvv.id_atleet,
d1.naam AS d1naam,
d2.naam AS d2naam,
d3.naam AS d3naam,
a.naam
FROM
beker_van_vlaanderen AS bvv
JOIN disciplines AS d1 ON d1.id = bvv.id_discipline1
JOIN disciplines AS d2 ON d2.id = bvv.id_discipline2
JOIN disciplines AS d3 ON d3.id = bvv.id_discipline3
JOIN atleten AS a ON a.id = bvv.id_atleet
Ik neem aan dat alle 3 de disciplines ingevuld moeten zijn anders moet je left join gebruiken. En gebruik geen spaties in tabelnamen, ben je gelijk van die stomme backticks af.
met onderstaande code is het gelukt:
"SELECT
`Atleten`.`Voornaam` AS Voornaam,
`Atleten`.`Naam` AS Naam,
d1.`Naam` AS `Discipline1` ,
d2.`Naam` AS `Discipline2` ,
d3.`Naam` AS `Discipline3`
FROM BvV
INNER JOIN Atleten ON `BvV`.`id_atleet` = `Atleten`.`id`
INNER JOIN Disciplines AS d1 ON `BvV`.`id_discipline1` = d1.`id`
INNER JOIN Disciplines AS d2 ON `BvV`.`id_discipline2` = d2.`id`
LEFT JOIN Disciplines AS d3 ON `BvV`.`id_discipline3` = d3.`id`"
Weer wat bijgeleerd ;-) Bedankt voor alle hulp!
Groeten,
Olivier