SELECT + SUM ...

Eléphant du PHP | 231 Messages

16 mars 2006, 19:39

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 :?

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

16 mars 2006, 22:58

Il faudrait le détail des tables impliquées (structures) pour trouver une requete au plus juste.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 231 Messages

17 mars 2006, 00:21

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 ...)

Eléphant du PHP | 231 Messages

17 mars 2006, 15:06

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

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

17 mars 2006, 20:25

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

Eléphant du PHP | 231 Messages

17 mars 2006, 20:54

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:

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

18 mars 2006, 00:57

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.