2010-09-16 14 views
0

J'ai besoin de connaître l'équipe ayant le plus grand nombre de correspondances dans une certaine ville.MySQL Utilisation non valide de la fonction de groupe sur l'hôte partagé

SELECT COUNT(am_matches.team_id) AS matches_count, 
am_matches.team_id AS team_id 
FROM am_matches 
LEFT JOIN am_team ON (am_matches.team_id = am_teams.id) 
WHERE am_matches.status = '3' AND am_teams.city_id = '$city_id' 
GROUP BY am_matches.team_id 
ORDER BY COUNT(am_matches.team_id) DESC LIMIT 1 

Cela fonctionne sur un serveur local (WAMP), mais sur un hôte partagé throws « Utilisation non valide de la fonction de groupe ». Y a-t-il une autre façon d'obtenir cela? J'ai besoin de faire beaucoup de requêtes similaires, donc je voudrais savoir une approche plus lisible d'obtenir des valeurs similaires. Merci.

+2

Modifier ORDER BY COUNT (am_matches.team_id) 1 à DESC LIMIT ORDER BY 1 LIMIT 1 –

+0

DESC wow! c'était facile .. Que fait le "1"? – JoaoPedro

+2

L'ordre par peut prendre les noms de colonnes ou leur index dans la liste de sélection. Donc, fondamentalement, il fait la même chose mais il ne réévalue pas l'expression de compte et est plus optimisé. –

Répondre

0

Vous pouvez commander par "1" comme commentaire, ou vous pouvez utiliser l'alias de colonne "matches_count". Il est préférable et attendu d'utiliser l'alias, pas l'index numérique, pour des raisons de clarté et de lisibilité. Vous ne réappelez les fonctions de regroupement que dans une clause HAVING, jamais dans ORDER. Au moment où ORDER voit vos résultats, les données sont toutes assemblées et juste triées.

ORDER BY matches_count DESC LIMIT 1