Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

wceolin

[Resolvido] Restringir valores

Recommended Posts

Olá, não estou conseguindo resolver um problema.

 

Tenho o código abaixo que pega o resultado das corridas cadastradas e apresenta um ranking para determinado o circuito:

 

SELECT COUNT(*) AS 'races', SUM(points) AS points, SUM(ranking) AS rank, d.name AS driver_name, d.url AS driver_url, 
						nat.`iso-3166-alpha2` AS iso, nat.name AS country, nat.url AS nat_url,
						ROUND(AVG(r.grid), 2) AS avg_grid, ROUND(AVG(r.position), 2) AS avg_position,
						SUM(IF(grid=1, 1, 0)) AS poles,
						SUM(IF(position=1, 1, 0)) AS first,
						GREATEST(SUM(IF(position=1, 1, 0)), 1) AS wins,
						SUM(IF(position=2, 1, 0)) AS second,
						SUM(IF(position=3, 1, 0)) AS third,
						SUM(IF(fastest_lap_checkbox=1, 1, 0)) AS fastest_lap
			FROM
				msr_driver d,
				msr_formula f,
				msr_season s,
				msr_driver_races_for dr,
				msr_nationality nat, 
				msr_session n,
				msr_event e,
				msr_circuit ct,
				msr_result r
			LEFT JOIN
				msr_classification_types c
			ON
				r.id_classification_types = c.id_classification_types
			WHERE
				f.shortcode = %s AND
				e.id_event = n.event_id AND
				ct.id_circuit = e.circuit_id AND
				ct.shortcode = %s AND
				e.season_id = s.id_season AND
				s.formula_id = f.id_formula AND
				dr.season_id = s.id_season AND
				dr.driver_id = d.id_driver AND
				nat.id_nationality = d.nationality_id AND
				r.session_id = n.id_session AND n.is_race = 1 AND
				r.tsd_id = dr.tsd_id	 	
			GROUP BY
				d.id_driver
			ORDER BY first DESC

 

O meu "problema" é que ele mostra todos os pilotos que correram naquele circuito. Gostaria que mostrasse apenas os pilotos que estão disputando a atual temporada.

 

Ou seja, que mostrasse apenas os pilotos em que s.shortcode = 2012, por exemplo. Se eu coloco esse parâmetro no "WHERE" ele retorna apenas os pilotos de 2012, mas também apenas o resultado de 2012.

 

Eu gostaria que mostrasse apenas os pilotos de 2012, mas o ranking deles naquele circuito, com todos os resultados dos anos anteriores.

 

Alguém poderia me ajudar?

 

Grato!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Testei colocando:

 

GROUP BY d.id_driver HAVING dr.season_id = 120

 

Mas aparece apenas os pilotos cuja primeira temporada foi aquela com ID=120 e não todos os que estão cadastrados na temporada 120. :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

tente com exists ou in

 

Simplificando pois sua query está muito complexa

 

select *
from   ...
where ...
and  d.id_driver in (select d2.id_driver    
                    from msr_driver d2,msr_season s2
                    where d2.id_driver = s2.d_driver
                    and   s2.shortcode = 2012)

 

mas a ideia básica e listar pilotos da temporada e ver se atende a lista

na query principal.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.