wceolin 0 Denunciar post Postado Julho 24, 2012 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
wceolin 0 Denunciar post Postado Julho 24, 2012 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
Motta 645 Denunciar post Postado Julho 24, 2012 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
wceolin 0 Denunciar post Postado Julho 24, 2012 Funcionou, Motta. :) Muito obrigado! Compartilhar este post Link para o post Compartilhar em outros sites