Il vous reste left join venues
, mais vous avez des conditions dans le where
clause sur les venues
joints ligne, donc seules les lignes jointes seront renvoyées. Cependant, c'est un problème secondaire - lisez la suite pour savoir pourquoi vous n'avez pas du tout besoin d'une jointure.
Ensuite, si la ville est vancouver
, il n'est pas nécessaire de également test pour le pays ou l'état.
Enfin, si vous essayez de trouver "combien d'événements futurs auront lieu à Vancouver", vous n'avez pas besoin d'une jointure, car l'identifiant du lieu est une constante !
Essayez ceci :
select count(*) as event_count
from events
where venueid = (select id from venues where city = 'vancouver')
and startdate > curdate()
and te_id != 0
Mysql utilisera l'index sur venueid
sans que vous ayez à utiliser un indice. Si ce n'est pas le cas, exécutez ceci :
analyze events
qui mettra à jour les statistiques de la distribution des données dans les colonnes indexées. Notez que si beaucoup de vos événements ont lieu à Vancouver, il est plus efficace de ne pas utilisez un index (car la plupart des lignes devront être accessibles de toute façon).