IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Nombre d'adhérent par continent


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    1 907
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 907
    Points : 411
    Points
    411
    Par défaut Nombre d'adhérent par continent
    Bonjour à tous,

    j'ai les tables suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
     
    TABLE A
     
    id_adh   id_vil
     
     
    TABLE B
     
    id_adh   description
     
     
    TABLE C
     
    id_adh   destination
     
     
    TABLE D
     
    id_adh   photo
     
     
    TABLE E
     
    id_vil   id_pay   ville
     
     
    TABLE F
     
    id_pay id_vil   pays
     
     
    TABLE G
     
    id_continent   continent
    et j'ai besoin de connaître le nombre d'adhérent (id_adh de la TABLE A)

    pour un continent donné ( contient = ASIE par exemple).

    Merci d'avance pour votre aide.

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    COUNT et GROUP BY te serviront.

    Le continent est stocké dans la colonne destination ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    1 907
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 907
    Points : 411
    Points
    411
    Par défaut
    ensuite je compte boucler sur chaque adhérent (id_adh) afin de récupérer les valeur suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    description   destination   photo   pays  ville
    En fait je ne vaux que le nombre d'adhérent. Ca c'est juste une étape préliminaire à ce que je veux réellement.

    Dès que j'ai ce nombre, j'ai besoin de connaître pour chaque adhérent les champs suivants :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    description   destination   photo   pays  ville

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Il faut donc faire des jointures pour aller chercher l'info du continent à partir de la ville de l'adhérent.

    Un COUNT(*) groupé par continent et tu as ton résultat.

    Tu essayes un peu ?
    Tu as déjà essayé une requête ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    1 907
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 907
    Points : 411
    Points
    411
    Par défaut
    Bonjour CinePhil,

    oui j'ai essayé une requête mais j'ai l'impression que ça ne fonctionne pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
     
     
    $sqla = sprintf("SELECT A.id_adh, A.id_vil, B.id_adh, B.id_log, B.description, C.id_adh, C.continent, C.pays, C.ville, D.id_log, D.up_nom, E.id_vil, E.id_pay, E.ville, F.id_pay, F.id_con, F.pays_fr, G.cont_fr
    FROM flatforswap_adherent A
    INNER JOIN flatforswap_logement B ON A.id_adh = B.id_adh
    INNER JOIN flatforswap_destination C ON A.id_adh = C.id_adh
    INNER JOIN flatforswap_photo D ON B.id_log = D.id_log
    INNER JOIN flatforswap_ville E ON A.id_vil = E.id_vil
    INNER JOIN flatforswap_pays F ON E.id_pay = F.id_pay 
    INNER JOIN flatforswap_continent G
    WHERE G.cont_fr='EUROPE' AND A.id_adh=4");
     
    echo $sqla;
     
    $reqa = mysql_query($sqla) or die('Erreur SQL !<br>'.$sqla.'<br>'.mysql_error());
    // echo $reqa;
     
    echo 'nombre ='.mysql_num_rows($reqa);
     
    $dataa = mysql_fetch_assoc($reqa);
     
    $description == $dataa['description'];
     
    echo 'description ='.$description;
    ce qui est bizarre, c'est le mysql_num_rows($reqa) me donne un nombre de 20

    et en ce qui concerne description, j'ai le message d'erreur suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    Notice: Undefined variable: description in e:\easyphp1-8\www\liste.php on line 61
     
    Notice: Undefined variable: description in e:\easyphp1-8\www\liste.php on line 63
    mais j'ai l'impression que sur la requête en elle-m^me je n'ai pas d'erreur...

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Dans la requête, il manque la dernière condition de jointure entre le pays et le continent.

    j'ai besoin de connaître le nombre d'adhérent (id_adh de la TABLE A) pour un continent donné
    Encore une fois, si tu ne veux que le nombre, inutile de ramener toutes les colonnes ; il suffit de compter les lignes en sélectionnant un continent !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT COUNT(*) AS nb_adherents
    FROM flatforswap_adherent A
    INNER JOIN flatforswap_logement B ON A.id_adh = B.id_adh
      INNER JOIN flatforswap_photo D ON B.id_log = D.id_log
    INNER JOIN flatforswap_destination C ON A.id_adh = C.id_adh
    INNER JOIN flatforswap_ville E ON A.id_vil = E.id_vil
      INNER JOIN flatforswap_pays F ON E.id_pay = F.id_pay 
        INNER JOIN flatforswap_continent G ON G.id_continent = F.id_continent
    WHERE G.cont_fr = 'EUROPE'
    Le message d'erreur relève du code PHP qui t'explique clairement que la variable nommée 'description' utilisée aux lignes 61 et 63 du programme liste.php n'est pas définie.

    Pour cette partie, adresse toi au forum PHP ou PHP et MySQL.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #7
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    1 907
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 907
    Points : 411
    Points
    411
    Par défaut
    Au fait le nombre d'adhérent n'est qu'une étape préliminaire puis que ma requête principale doit me donner les champs suivants

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    description   destination   photo   pays  ville
    par adhérent.

    Au fait dès que j'aurais mon nombre d'adhérent, il faudra que je boucle sur chaque adhérent pour obtenir les champs précédents.

  8. #8
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Alors ta requête était presque bonne, à la condition de jointure près.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    SELECT A.id_adh, A.id_vil, 
      B.id_log, B.description, 
      C.continent, C.pays, C.ville, 
      D.id_log, D.up_nom, 
      E.id_vil, E.id_pay, E.ville, 
      F.id_pay, F.id_con, F.pays_fr, 
      G.cont_fr
    FROM flatforswap_adherent A
    INNER JOIN flatforswap_logement B ON A.id_adh = B.id_adh
      INNER JOIN flatforswap_photo D ON B.id_log = D.id_log
    INNER JOIN flatforswap_destination C ON A.id_adh = C.id_adh
    INNER JOIN flatforswap_ville E ON A.id_vil = E.id_vil
      INNER JOIN flatforswap_pays F ON E.id_pay = F.id_pay 
        INNER JOIN flatforswap_continent G ON G.id_continent = F.id_continent
    WHERE G.cont_fr = 'EUROPE'
    Ceci dit, dans la description de tes tables un peu plus haut, la table C ne contient que id_adh et destination. Je ne vois pas comment tu peux en extraire le continent, le pays et la ville !

    On peut avoir la description exacte des tables (résultat de SHOW CREATE TABLE la_table sur chaque table) ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  9. #9
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    1 907
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 907
    Points : 411
    Points
    411
    Par défaut
    Voici ma table destination

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
     
    -- 
    -- Structure de la table `flatforswap_destination`
    -- 
     
    CREATE TABLE `flatforswap_destination` (
      `id_des` int(10) unsigned NOT NULL auto_increment,
      `id_adh` int(10) unsigned NOT NULL default '0',
      `continent` varchar(128) NOT NULL default '',
      `pays` varchar(128) NOT NULL default '',
      `ville` varchar(128) NOT NULL default '',
      `autre` varchar(128) NOT NULL default '',
      `date_deb` date NOT NULL default '0000-00-00',
      `date_fin` date NOT NULL default '0000-00-00',
      `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
      PRIMARY KEY  (`id_des`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 PACK_KEYS=0 COMMENT='Adherent -0,n----Choisir----1,1- Destination' AUTO_INCREMENT=40 ;
    par contre pour en revenir à la requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
     
    include ('connect.php');
     
    $sqla = sprintf("SELECT A.id_adh, A.id_vil, B.id_adh, B.id_log, B.description, C.id_adh, C.continent, C.pays, C.ville, D.id_log, D.up_nom, E.id_vil, E.id_pay, E.ville, F.id_pay, F.id_con, F.pays_fr, G.cont_fr
    FROM flatforswap_adherent A
    INNER JOIN flatforswap_logement B ON A.id_adh = B.id_adh
    INNER JOIN flatforswap_destination C ON A.id_adh = C.id_adh
    INNER JOIN flatforswap_photo D ON B.id_log = D.id_log
    INNER JOIN flatforswap_ville E ON A.id_vil = E.id_vil
    INNER JOIN flatforswap_pays F ON E.id_pay = F.id_pay 
    INNER JOIN flatforswap_continent G ON G.id_con = F.id_con
    WHERE G.cont_fr= 'EUROPE'");
     
    $reqa = mysql_query($sqla) or die('Erreur SQL !<br>'.$sqla.'<br>'.mysql_error());
     
    echo 'nombre ='.mysql_num_rows($reqa);
     
    $dataa = mysql_fetch_assoc($reqa);
     
    $description == $dataa['description'];
     
    echo 'description ='.$description;
    j'ai deux intérogations...

    je ne comprends pas pourquoi le mysql_num_rows($reqa) me retourne le chiffre 20...

    Et pourquoi je ne parviens à extraire le champ description...

  10. #10
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    C'est dommage d'avoir mis la ville, le pays et le continent en dur dans la table destination alors qu'il existe des tables pour ces entités ! Il ne devrait y avoir ici que l'identifiant de la ville.

    je ne comprends pas pourquoi le mysql_num_rows($reqa) me retourne le chiffre 20...
    Ca veut dire que la requête retourne un résultat de 20 lignes.

    Et pourquoi je ne parviens à extraire le champ description...
    Il y a un = en trop dans ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $description == $dataa...
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. Identifiant des adhérents par continent
    Par sam01 dans le forum Requêtes
    Réponses: 2
    Dernier message: 25/05/2010, 16h22
  2. IB et Nombre de requêtes par secondes
    Par lio33 dans le forum Débuter
    Réponses: 5
    Dernier message: 15/09/2005, 16h52
  3. [Petite requête] Nombre de transactions par jour
    Par Braim dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/04/2003, 10h53
  4. XMLGram et nombre d'enregistrements par page
    Par Sylvain Leray dans le forum XMLRAD
    Réponses: 7
    Dernier message: 26/02/2003, 12h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo