Page 1 sur 1

SELECT + SUM ...

Posté : 16 mars 2006, 19:39
par dark_vidor
Je fait une requete :

Code : Tout sélectionner

SELECT id, pseudo, team, xp_spatiale, xp_terre FROM players WHERE active != 0
jusqu'a la pas bien compliquer ...

ensuite j'aimerai que le resultat me retroune en meme temps le nombre de planete que posede un joueur

Code : Tout sélectionner

SELECT SUM(planetes) WHERE planetes.players = players.id
ou un truc dans ce genre la :? mais je sais pas faire :oops:

pouvez vous m'aidez :?

Posté : 16 mars 2006, 22:58
par Truc
Il faudrait le détail des tables impliquées (structures) pour trouver une requete au plus juste.

Posté : 17 mars 2006, 00:21
par dark_vidor

Code : Tout sélectionner

SELECT players.id, players.pseudo, players.team, players.xp_spatiale, players.xp_terre, COUNT(planetes.players) FROM players INNER JOIN planetes ON players.id = planetes.players WHERE active != 0 GROUP BY players.id, players.pseudo, players.team, players.xp_spatiale, players.xp_terre ORDER BY.COUNT(planetes.players)
c'est ça que je veux faire (fonctionne sauf quand je met le order by ...)

Posté : 17 mars 2006, 15:06
par dark_vidor
requête SQL:

SELECT players.id, players.pseudo, players.team, players.xp_spatiale, players.xp_terre, COUNT( planetes.players )
FROM players
INNER JOIN planetes ON players.id = planetes.players
WHERE active !=0
GROUP BY players.id, players.pseudo, players.team, players.xp_spatiale, players.xp_terre
ORDER BY COUNT( planetes.players )
LIMIT 0 , 30
MySQL a répondu:

#1111 - Invalid use of group function

Posté : 17 mars 2006, 20:25
par Hubert Roksor
Tu ne peux pas utiliser de fonctions de groupement (fr ?) dans une clause ORDER BY. Essaie ça plutôt:

Code : Tout sélectionner

SELECT players.id, players.pseudo, players.team, players.xp_spatiale, players.xp_terre, COUNT( planetes.players ) AS total FROM players INNER JOIN planetes ON players.id = planetes.players WHERE active !=0 GROUP BY players.id, players.pseudo, players.team, players.xp_spatiale, players.xp_terre ORDER BY total LIMIT 0 , 30

Posté : 17 mars 2006, 20:54
par dark_vidor
heu suffisait de creer un alias

$sql = "SELECT players.id, players.pseudo, players.team, players.xp_spatiale, players.xp_terre, players.grade, players.description, COUNT(planetes.players) as nb_planetes_players FROM players INNER JOIN planetes ON players.id = planetes.players WHERE active !=0 GROUP BY players.id, players.pseudo, players.team, players.xp_spatiale, players.xp_terre";
switch($_GET['req'])
{
	case "nom": $sql = $sql." ORDER BY players.pseudo"; break;
	case "xps": $sql = $sql." ORDER BY players.xp_spatiale DESC"; break;
	case "xpt": $sql = $sql." ORDER BY  players.xp_terre DESC"; break;
	case "nbp": $sql = $sql." ORDER BY nb_planetes_players DESC"; break;
	default : $sql = $sql." ORDER BY nb_planetes_players DESC";
}
:wink: :arrow:

Posté : 18 mars 2006, 00:57
par Hubert Roksor
Pour info,
$a = $a . $b;
est équivalent à
$a .= $b;
...si ce n'est que la seconde forme est plus rapide et utilise certainement moins de mémoire. Voir Les opérateurs d'assignation.