Hallo,

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.

SELECT 
w.team_1,
w.team_2,
w.datum,
w.tijd
FROM 
Wedstrijden AS w

Met dit nummer haal ik uit Teamindeling in welk team de persoon dit jaar speelt.

LEFT JOIN 
Teamindeling AS t
ON 
t.leden_id = '29' AND t.seizoen = '2013/2014' 

Hierna heb ik 3 teams over met 3 team-id's
Deze haal ik dan door Teams om de teamnamen op te sporen

LEFT JOIN
Teams AS team
ON
t.team_id = team.id

en dan stel ik mijn eisen:

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

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?
Als bovenstaande je gehele query is dan vergeet je de wedstrijden tabel te joinen.
En waarom ga je in hemelsnaam een date_format op iets wat al een een datum c.q. tijd is:

WHERE w.datum >= CURRENT_DATE AND w.tijd >= CURRENT_TIME

lijkt mij veel handiger ;-)
De tabel waar de wedstrijden in staan staan in de FROM

Bij dat andere had ik dat inderdaad ook via mysql Date en Time kunnen doen :)

Zou je er nog eens naar kunnen kijken?

Bedankt!
Excuus niet goed gekeken. Kan je trouwens je query even tussen [code] en [/code] tags plaatsen, dat maakt het wat beter leesbaar.

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.
ik zou voor de teams waarin de speler zit een ander oplossing kiezen dan een join. Ik zou met twee sub-queries werken (1 voor team_1 en 1 voor team_2).

Zoiets (niet getest)

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
Helaas is dit een verkeerde oplossing, JOINS zijn altijd beter dan WHERE IN subqueries.
Dat laatste is een crime voor de performance.
Ger, ik heb zoveel mogelijk code tussen tags gezet.

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:

			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

Reageren