Query probleempje
Kan er iemand even meedenken over mijn query, ik zie het namelijk niet meer :)
Ik wil het volgende hebben:
De eerst volgende wedstrijd van een bepaald persoon, maar deze persoon kan in meerdere teams zitten, dus wil ik alle wedstrijden op volgorde op datum, en dan LIMIT 1 zodat hij alleen de allereerste toont. Dit is zo'n beetje wat ik heb:
Ik begin het met ID van de speler. In dit geval 29.
Met dit nummer haal ik uit Teamindeling in welk team de persoon dit jaar speelt.
Hierna heb ik 3 teams over met 3 team-id's
Deze haal ik dan door Teams om de teamnamen op te sporen
en dan stel ik mijn eisen:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
WHERE
( w.datum > DATE_FORMAT(NOW(),'%Y-%m-%d') OR (w.datum = DATE_FORMAT(NOW(),'%Y-%m-%d') AND DATE_FORMAT(w.tijd,'%H:%i') > DATE_FORMAT(NOW(),'%H:%i') ))
AND
(w.uitslag_t1 IS NULL OR w.uitslag_t1 = '')
AND
w.seizoen = '2013/2014'
ORDER BY
w.datum ASC
LIMIT 1
( w.datum > DATE_FORMAT(NOW(),'%Y-%m-%d') OR (w.datum = DATE_FORMAT(NOW(),'%Y-%m-%d') AND DATE_FORMAT(w.tijd,'%H:%i') > DATE_FORMAT(NOW(),'%H:%i') ))
AND
(w.uitslag_t1 IS NULL OR w.uitslag_t1 = '')
AND
w.seizoen = '2013/2014'
ORDER BY
w.datum ASC
LIMIT 1
Zoiets, maar dan werkt hij niet helemaal :P
-Ik ga nu even kijken wat hij precies voor fout geeft.
Ik krijg als resultaat de allereerste wedstrijd te zien, maar geen rekening gehouden met de 3 teams, krijg namelijk een wedstrijd van een heel ander team....
Zit zelf te denken aan LEFT,RIGHT join fout ofzo?
Kan iemand me helpen?
Gewijzigd op 19/08/2013 22:31:17 door D B
En waarom ga je in hemelsnaam een date_format op iets wat al een een datum c.q. tijd is:
lijkt mij veel handiger ;-)
Bij dat andere had ik dat inderdaad ook via mysql Date en Time kunnen doen :)
Zou je er nog eens naar kunnen kijken?
Bedankt!
En probeer je query wat logischer op te bouwen, dan je waarschijnlijk het probleem niet gehad.
Je gebruikt namelijk geen kolom van de wedstrijden in de join voorwaarden, en dan krijg je natuurlijk een vaag resultaat.
Zoiets (niet getest)
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
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
SELECT
w.team_1,
w.team_2,
w.datum,
w.tijd
FROM
Wedstrijden AS w
WHERE
((w.team_1 IN (SELECT
t1.team_id
FROM
teamindeling t1
WHERE
t1.leden_id = '29' AND t1.seizoen = '2013/2014'))
OR
(w.team_2 IN (SELECT
t2.team_id
FROM
teamindeling t2
WHERE
t2.leden_id = '29' AND t2.seizoen = '2013/2014'))
AND
(w.datum > DATE_FORMAT(NOW(),'%Y-%m-%d') OR (w.datum = DATE_FORMAT(NOW(),'%Y-%m-%d') AND DATE_FORMAT(w.tijd,'%H:%i') > DATE_FORMAT(NOW(),'%H:%i')))
AND
(w.uitslag_t1 IS NULL OR w.uitslag_t1 = '')
AND
w.seizoen = '2013/2014'
ORDER BY
w.datum ASC
LIMIT 1
w.team_1,
w.team_2,
w.datum,
w.tijd
FROM
Wedstrijden AS w
WHERE
((w.team_1 IN (SELECT
t1.team_id
FROM
teamindeling t1
WHERE
t1.leden_id = '29' AND t1.seizoen = '2013/2014'))
OR
(w.team_2 IN (SELECT
t2.team_id
FROM
teamindeling t2
WHERE
t2.leden_id = '29' AND t2.seizoen = '2013/2014'))
AND
(w.datum > DATE_FORMAT(NOW(),'%Y-%m-%d') OR (w.datum = DATE_FORMAT(NOW(),'%Y-%m-%d') AND DATE_FORMAT(w.tijd,'%H:%i') > DATE_FORMAT(NOW(),'%H:%i')))
AND
(w.uitslag_t1 IS NULL OR w.uitslag_t1 = '')
AND
w.seizoen = '2013/2014'
ORDER BY
w.datum ASC
LIMIT 1
Dat laatste is een crime voor de performance.
Verder heb ik nog even gekeken naar de wedstrijden en het verband met teams
in wedstrijden zit een kolom competitie en in teams zit een kolom teamnaan,
deze zou ik inderdaad nog ergens met een ON bij elkaar moeten zetten denk ik.
Ik ga even wat puzzelen en dan zal ik even wat posten hoe het er voor staat.
Toevoeging op 19/08/2013 22:50:23:
Uiteindelijk is het dit geworden, en het lijkt nu goed te werken:
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
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
SELECT
w.team_1,
w.team_2,
DATE_FORMAT(w.datum, '%a %d %M') as datum1,
TIME_FORMAT(w.tijd, '%H:%i') as tijd
FROM
Wedstrijden AS w
LEFT JOIN
Teams AS team
ON
team.team = w.competitie
LEFT JOIN
Teamindeling AS t
ON
t.team_id = team.id AND t.seizoen = '2013/2014'
WHERE
t.leden_id = '". $row['id']. "'
AND
( w.datum > DATE_FORMAT(NOW(),'%Y-%m-%d') OR (w.datum = DATE_FORMAT(NOW(),'%Y-%m-%d') AND DATE_FORMAT(w.tijd,'%H:%i') > DATE_FORMAT(NOW(),'%H:%i') ))
AND
(uitslag_t1 IS NULL OR uitslag_t1 = '')
AND
w.seizoen = '". $seizoen. "'
ORDER BY
datum ASC
LIMIT 1
w.team_1,
w.team_2,
DATE_FORMAT(w.datum, '%a %d %M') as datum1,
TIME_FORMAT(w.tijd, '%H:%i') as tijd
FROM
Wedstrijden AS w
LEFT JOIN
Teams AS team
ON
team.team = w.competitie
LEFT JOIN
Teamindeling AS t
ON
t.team_id = team.id AND t.seizoen = '2013/2014'
WHERE
t.leden_id = '". $row['id']. "'
AND
( w.datum > DATE_FORMAT(NOW(),'%Y-%m-%d') OR (w.datum = DATE_FORMAT(NOW(),'%Y-%m-%d') AND DATE_FORMAT(w.tijd,'%H:%i') > DATE_FORMAT(NOW(),'%H:%i') ))
AND
(uitslag_t1 IS NULL OR uitslag_t1 = '')
AND
w.seizoen = '". $seizoen. "'
ORDER BY
datum ASC
LIMIT 1