8795 sujets

Développement web côté serveur, CMS

Bon, je sais que mon titre est loin d'être clair, mais l'idée est là.

soit une table (carte_cases) qui ressemble à ça :

carte / Altitude / X / Y / Territoire

la clé primaire regroupe les 4 premiers champs. (de manière à ce que chaque case soit unique et reconnaissable par ses coordonnées.

Chaque case est liée à un territoire; un territoire a plusieurs cases.
Chaque carte a 1 ou plusieurs territoires; chaque territoire n'appartient qu'à une carte.

Je ne compte pas faire de table supplémentaire, mais il me faudrait savoir le nombre de territoires par cartes.

En utilisant cette query, je parviens à avoir la liste des territoires et la carte associée. Mais suis-je obligé de passer par php pour compter ?

Select distinct
carte_cases.Territoire,
carte_cases.Carte
From
carte_cases
Order By
carte_cases.Carte Asc,
carte_cases.Territoire Asc


ça me donne en résultat :
territoire|carte
1|1 / 2|1 / 3|1 / 4|1 / 5|1 / 6|1 / 7|1 / 8|1 / 9|1 / 10|1 / 11|1 / 12|1 / 14|1 / 15|1 / 13|2 / 16|2 / 17|3 / 18|3 / 19|3 / 20|3 / 21|3 / 22|3 / 23|3 / 24|3 / 25|3 / 26|3 / 27|3 / 28|3 / 29|3 / 30|3 / 31|3 / 32|3 / 33|4 / 34|5 / 35|6 / 36|7

Moi j'aimerais
compte|carte
14|1 / 2|2 / 16|3 / 1|4 / 1|5 / 1|6 / 1|7

merci d'avance à tout ceux qui auraient une piste ^^
Modifié par Lothindil (20 Jan 2014 - 16:41)
Modérateur
Bonjour Lothindil,

As-tu regardé du côté de COUNT et GROUP BY en SQL?

Select carte_cases.Carte, Count(carte_cases.Territoire) AS TotalTerritoire,
From carte_cases
GROUP BY carte_cases.Carte


Je n'ai pas testé concrètement ce code avec de vraies données. J'y suis allé de mémoire et c'est pour du MS SQL.
Modifié par Tony Monast (20 Jan 2014 - 15:45)
Merci du coup de main, j'avais pensé à count, mais pas à group by.

Et vu mes tables, j'ai dû rajouter un distinct (pour éviter qu'il compte toutes les cases de chaque territoire dans le count) et ça donne ça au final :

Select carte_cases.Carte,
Count(distinct carte_cases.Territoire) AS total
From carte_cases
Group By carte_cases.Carte
Modérateur
Effectivement. C'est mieux avec un DISTINCT.

Je m'en serais rendu compte en ayant la vraie table sous la main, mais là je n'avais pas beaucoup de temps!

Au plaisir de t'avoir donné un coup de main! Smiley smile