Uitbreiding Query
Hallo,
Ik heb een query opgebouwd, maar kom er niet helemaal uit.
Ik denk dat ik een subquery moet gebruiken, of misschien dat het met 2x JOIN met 2 verschillende ON statetements ook kan??
Dit is wat ik heb:
In mijn tabel Bestuursaanwezigheid staat een wedstrijd_id en 2 personen: persoon1_id en persoon2_id, de voornamen/achternamen komen uit tabel Leden.
Ik heb een query opgebouwd, maar kom er niet helemaal uit.
Ik denk dat ik een subquery moet gebruiken, of misschien dat het met 2x JOIN met 2 verschillende ON statetements ook kan??
Dit is wat ik heb:
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
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
SELECT
w.id,
datum,
tijd AS tijdvan,
ADDTIME(tijd,'02:00:00') AS tijdtot,
CONCAT(team_1, ' - ',team_2, ' ',
CASE uitslag_t1
WHEN '' THEN CONCAT('(', l.voornaam_persoon1, ' ', l.achternaam_persoon1, ' - ', l.voornaam_persoon2, ' ', l.achternaam_persoon2, ')')
WHEN 'A' THEN '(Afgelast)'
WHEN 'U' THEN '(Uitgesteld)'
ELSE CONCAT('(', l.voornaam_persoon1, l.achternaam_persoon1, ' - ', l.voornaam_persoon1, l.achternaam_persoon2, ')')
END) AS omschrijving,
CONCAT(team_1, ' - ',team_2, ' ',
CASE uitslag_t1
WHEN '' THEN ''
WHEN 'A' THEN '(Afgelast)'
WHEN 'U' THEN '(Uitgesteld)'
ELSE CONCAT('(Uitslag: ', uitslag_t1, ' - ', uitslag_t2, ')')
END) AS beschrijving
FROM
Wedstrijden AS w
LEFT JOIN
Bestuursaanwezigheid AS b
ON
w.id = b.wedstrijd_id
LEFT JOIN
Leden AS l
ON
b.persoon1_id = l.id //hier heb ik nu een ON met persoon1
WHERE
competitie = ' hier_staat_een_team '
w.id,
datum,
tijd AS tijdvan,
ADDTIME(tijd,'02:00:00') AS tijdtot,
CONCAT(team_1, ' - ',team_2, ' ',
CASE uitslag_t1
WHEN '' THEN CONCAT('(', l.voornaam_persoon1, ' ', l.achternaam_persoon1, ' - ', l.voornaam_persoon2, ' ', l.achternaam_persoon2, ')')
WHEN 'A' THEN '(Afgelast)'
WHEN 'U' THEN '(Uitgesteld)'
ELSE CONCAT('(', l.voornaam_persoon1, l.achternaam_persoon1, ' - ', l.voornaam_persoon1, l.achternaam_persoon2, ')')
END) AS omschrijving,
CONCAT(team_1, ' - ',team_2, ' ',
CASE uitslag_t1
WHEN '' THEN ''
WHEN 'A' THEN '(Afgelast)'
WHEN 'U' THEN '(Uitgesteld)'
ELSE CONCAT('(Uitslag: ', uitslag_t1, ' - ', uitslag_t2, ')')
END) AS beschrijving
FROM
Wedstrijden AS w
LEFT JOIN
Bestuursaanwezigheid AS b
ON
w.id = b.wedstrijd_id
LEFT JOIN
Leden AS l
ON
b.persoon1_id = l.id //hier heb ik nu een ON met persoon1
WHERE
competitie = ' hier_staat_een_team '
In mijn tabel Bestuursaanwezigheid staat een wedstrijd_id en 2 personen: persoon1_id en persoon2_id, de voornamen/achternamen komen uit tabel Leden.
Het is wellicht handig als je ook nog even zegt wat de query zou moeten doen. ;-)
Uhm.... misschien wel makkelijk ja :)
De query haalt dus alle wedstrijden op van 1 bepaalde competitie. Hier wil ik mijn kolom bestuursaanwezigheid aan koppelen. In deze kolom staat het wedstrijd id en 2 persoon_id's.
Als ik dit volgens bovenstaande query aan elkaar koppel krijg ik, of 2 regels terug (omdat ik dan met left join elk persoon_id koppel), of 1 maar dan heb ik dus niet beide personen.
Ik wil dus eigenlijk dat bij l.voornaam_persoon1 de voornaam van persoon 1 komt en bij l.voornaam_persoon2 de voornaam van persoon_2. Nu denk ik dat ik eerst de persoon_id's uit bestuursaanwezigheid moet koppelen aan namen (in een subquery?) en deze dan kan gebruiken in de bovenstaande query (concat).
Hopelijk is het een beetje duidelijk :)
De query haalt dus alle wedstrijden op van 1 bepaalde competitie. Hier wil ik mijn kolom bestuursaanwezigheid aan koppelen. In deze kolom staat het wedstrijd id en 2 persoon_id's.
Als ik dit volgens bovenstaande query aan elkaar koppel krijg ik, of 2 regels terug (omdat ik dan met left join elk persoon_id koppel), of 1 maar dan heb ik dus niet beide personen.
Ik wil dus eigenlijk dat bij l.voornaam_persoon1 de voornaam van persoon 1 komt en bij l.voornaam_persoon2 de voornaam van persoon_2. Nu denk ik dat ik eerst de persoon_id's uit bestuursaanwezigheid moet koppelen aan namen (in een subquery?) en deze dan kan gebruiken in de bovenstaande query (concat).
Hopelijk is het een beetje duidelijk :)
Je zat dicht tegen de oplossing aan (alhoewel ik wat aannames heb moeten maken over je tabeldefinities):
Verder lijkt het me handiger (i.v.m. sorteren enzo) om de velden datum en tijd in 1 datetime-veld te stoppen en daar in je query dan alleen het datum- of tijddeel uit te halen.
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
SELECT
w.id,
datum,
tijd AS tijdvan,
ADDTIME(tijd,'02:00:00') AS tijdtot,
CONCAT(team_1, ' - ',team_2, ' ',
CASE uitslag_t1
WHEN '' THEN CONCAT('(', l1.voornaam, ' ', l1.achternaam, ' - ', l2.voornaam, ' ', l2.achternaam, ')')
WHEN 'A' THEN '(Afgelast)'
WHEN 'U' THEN '(Uitgesteld)'
ELSE CONCAT('(', l1.voornaam, l1.achternaam, ' - ', l2.voornaam, l2.achternaam, ')')
END) AS omschrijving,
CONCAT(team_1, ' - ',team_2, ' ',
CASE uitslag_t1
WHEN '' THEN ''
WHEN 'A' THEN '(Afgelast)'
WHEN 'U' THEN '(Uitgesteld)'
ELSE CONCAT('(Uitslag: ', uitslag_t1, ' - ', uitslag_t2, ')')
END) AS beschrijving
FROM Wedstrijden AS w
LEFT JOIN Bestuursaanwezigheid AS b ON w.id = b.wedstrijd_id
LEFT JOIN Leden AS l1 ON b.persoon1_id = l1.id
LEFT JOIN Leden AS l2 ON b.persoon2_id = l2.id
w.id,
datum,
tijd AS tijdvan,
ADDTIME(tijd,'02:00:00') AS tijdtot,
CONCAT(team_1, ' - ',team_2, ' ',
CASE uitslag_t1
WHEN '' THEN CONCAT('(', l1.voornaam, ' ', l1.achternaam, ' - ', l2.voornaam, ' ', l2.achternaam, ')')
WHEN 'A' THEN '(Afgelast)'
WHEN 'U' THEN '(Uitgesteld)'
ELSE CONCAT('(', l1.voornaam, l1.achternaam, ' - ', l2.voornaam, l2.achternaam, ')')
END) AS omschrijving,
CONCAT(team_1, ' - ',team_2, ' ',
CASE uitslag_t1
WHEN '' THEN ''
WHEN 'A' THEN '(Afgelast)'
WHEN 'U' THEN '(Uitgesteld)'
ELSE CONCAT('(Uitslag: ', uitslag_t1, ' - ', uitslag_t2, ')')
END) AS beschrijving
FROM Wedstrijden AS w
LEFT JOIN Bestuursaanwezigheid AS b ON w.id = b.wedstrijd_id
LEFT JOIN Leden AS l1 ON b.persoon1_id = l1.id
LEFT JOIN Leden AS l2 ON b.persoon2_id = l2.id
Verder lijkt het me handiger (i.v.m. sorteren enzo) om de velden datum en tijd in 1 datetime-veld te stoppen en daar in je query dan alleen het datum- of tijddeel uit te halen.
Gewijzigd op 11/10/2014 11:09:29 door Willem vp




