Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1732 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MySQL] Requète un peu compliqué...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[MySQL] Requète un peu compliqué...

n°798651
smilm
Posté le 17-07-2004 à 20:01:26  profilanswer
 

Voici la structure de mes tables:
 
#
# Structure de la table `alliance_desc`
#
 
CREATE TABLE alliance_desc (
  id int(11) NOT NULL auto_increment,
  nom varchar(30) NOT NULL default '',
[...]
  recrutement char(1) NOT NULL default '1',
  PRIMARY KEY  (id),
  UNIQUE KEY nom (nom)
) TYPE=MyISAM COMMENT='Définition des alliances';
# --------------------------------------------------------
 
#
# Structure de la table `alliance_membres`
#
 
CREATE TABLE alliance_membres (
  id int(11) NOT NULL auto_increment,
  id_alliance int(11) NOT NULL default '0',
  id_village int(11) NOT NULL default '0',
  id_membre int(11) NOT NULL default '0',
[...]
  PRIMARY KEY  (id),
  UNIQUE KEY id_village (id_village)
) TYPE=MyISAM ;
 
 
Un peu d'explication:
La requete ci dessous sert a afficher la liste des alliances avec des informations tirer des deux tables: alliance_desc et alliance_membres.
De alliance_membres j'aimerais tirer le nombre de village appartenant à l'alliance [COUNT(alliance_membres.id)] mais aussi le nombre de membre appartenant à l'alliance étant donné que chaque membre peut avoir X village integrer dans une alliance.
 
Voici ma requete actuellement:
Elle ne gere pas le nombre de membre.
 
SELECT alliance_desc.nom, alliance_desc.id, COUNT(alliance_membres.id) AS nb_village
FROM alliance_desc
LEFT OUTER JOIN alliance_membres ON alliance_membres.id_alliance=alliance_desc.id
GROUP BY alliance_desc.id
ORDER BY '$ordredesc' DESC
LIMIT $limit,20";
 
 
Exemple concret:
Nous sommes dans la table alliance_membres.
Voici quelques enregistrement:
 
id, id_alliance, id_village, id_membre
1      1           2            5
1      1           9            5
1      1           5            5
1      1           1            2
1      1           7            2
 
Si vous m'avez suivi, j'aimerais donc obtenir le nombre de membre de deux en effectuant ma requete.
 
Je me demande si il y'a pas du DISTINCT qui traine ? En tout cas je n'arrive pas à l'integrer pour l'instant.
 
 
Merci d'avance.


Message édité par smilm le 17-07-2004 à 20:01:42
mood
Publicité
Posté le 17-07-2004 à 20:01:26  profilanswer
 

n°798668
gizmo
Posté le 17-07-2004 à 20:23:44  profilanswer
 

Telle que tu las conçois, ce n'est pas possible, tu cherches à faire des count sur deux groupements distincts, ce qui est interdit.
La solution la plsu rapide que je vois est de faire des requètes imbriquées (si ta version de MySQL le permet), ou alors changer la structure des tables.

n°798671
smilm
Posté le 17-07-2004 à 20:28:55  profilanswer
 

Je sais pas pour les requetes imbriqués.
 
Changez la structure de ma table, ca serait donc mettre un compteur_membre, compteur_village dans la table alliance_desc ?

n°798675
gizmo
Posté le 17-07-2004 à 20:41:08  profilanswer
 

par exemple. Mais à la base, tes tables me semble bizarement pensée (ou bien je ne saisie pas la logique qui s'y cache). Par exemple, tu as une table alliance_membre, et visiblement, ce ne sont aps les membres qui sont le centre de cette table mais un id dont je me demande encore à quoi il peut bien se rapporter vu que les villages sont déjà uniques et non nuls.

n°798684
smilm
Posté le 17-07-2004 à 20:59:01  profilanswer
 

oui mon id est useless ici.
 
Ha....
Donc:
Id_village en Primary Key ca me permetterait d'avoir le nombre de village et le nombre de membres ?

n°798686
gizmo
Posté le 17-07-2004 à 21:07:11  profilanswer
 

non.

n°798710
Arjuna
Aircraft Ident.: F-MBSD
Posté le 17-07-2004 à 22:26:16  profilanswer
 

Gizmo > Dans sa table "membre", il stocke en fait les membres et tous les villages qu'ils ont (je suppose que c'est la base d'un wargame ou autre)
 
En fait, si un village ne peut appartenir qu'à un utilisateur, logiquement c'est village la clé. Dans le cas contraire, c'est le couple village/membre qui devient la clé.
 
SmilM > Pour ce qui est de la requête... T'as essayé de rajouter simplement COUNT(DISTINCT alliance_mabres.id_membre) ?
 
En tout cas, j'ai recréé ta table membre, avec les mêmes données, et ça marche chez moi (SQL Server, mais bon, le count(distinct) est suffisament basic pour espérer qu'il soit supporté par MySQL)
 
select alliance, count(distinct village), count(distinct membre)
from membres
group by alliance
 
Ca mer retourne
 
1    5      2


Message édité par Arjuna le 17-07-2004 à 22:26:36
n°798743
gizmo
Posté le 17-07-2004 à 23:31:36  profilanswer
 

exact, j'avais oublié de count distinct.

n°798955
smilm
Posté le 18-07-2004 à 18:19:18  profilanswer
 

Merci beaucoup !
Je savais bien qu'il y'avait du distinct qui trainait mais je savais pas trop comment le placer.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MySQL] Requète un peu compliqué...

 

Sujets relatifs
[Socket] Répondre à une requête HTTPpb apostrophe pour saisie de texte dans bdd mysql
MYSQL - Recherche d'un "SELECT" hasardeux non "équiprobable" !Pb de requetes php/mysql et classement
Faire un dump d'une DB MySQL en UTF-8 Unicode ?active directory - ldap - php - mysql
SELECT/Mysql : syntaxe avec 1 seule variable sur 2 colones ?[MySQL] MySQL et EasyPHP
[Access] Sauvegarder les résultats d'une requete dans une table[PHP/Mysql] Insérer une image dans une BDD mysql
Plus de sujets relatifs à : [MySQL] Requète un peu compliqué...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR