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 :

double requete afficher les données communes [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2012
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 284
    Par défaut double requete afficher les données communes
    Hello,
    Le titre n'est pas tres explicite mais en fait c'est très simple.

    J'ai 2 requetes :

    Une requete qui selectionne toutes mes applications dans ma base :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $sql = ("SELECT * FROM application");
    $query=mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
    while ($result = mysql_fetch_assoc($query))	
    {
    $ID_APPOK = $result["ID_APP"];
    $NAME_APPOK = $result["NAME_APP"];
    echo $ID_APPOK.' '.$NAME_APPOK.'<br>';
    }
    Ce qui va m'afficher le total de mes applications :

    TOTAL APP :

    1 APP1
    2 APP2
    3 APP3
    4 APP4
    5 APP5
    6 APP6

    Une deuxième requete qui va lister pour un serveur donné, les applications associées :

    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
     
    $sql2 = ("
    select SERVER.ID_SERVER, SERVER.NAME_SERVER, APPLICATION.ID_APP, APPLICATION.NAME_APP
    FROM SERVER, APPLICATION, HOST
    WHERE SERVER.ID_SERVER=HOST.ID_SERVER
    AND APPLICATION.ID_APP=HOST.ID_APP
    AND SERVER.NAME_SERVER = '$NAME_SERVER';
    ");
     
    $query2=mysql_query($sql2) or die('Erreur SQL !<br>'.$sql2.'<br>'.mysql_error());	
    while ($result2 = mysql_fetch_assoc($query2))
    {
    $ID_APPOK2 = $result2["ID_APP"];
    $NAME_APPOK2 = $result2["NAME_APP"];
    echo $ID_APPOK2.' '.$NAME_APPOK2.'<br>';
    }
    Ce qui va m'afficher pour mon serveur $NAME_SERVER' (EX : SRVDEMO) les applications liées à celui-ci :

    APP HEBERGEES SUR SRVDEMO :

    1 APP1
    4 APP4
    5 APP5

    Jusque la pas de problème.

    Ce que je voudrais c'est afficher ma liste totale des applications et lorsque qu'une application est liée à mon serveur afficher un OK par exemple.

    SRVDEMO :

    1 APP1 OK
    2 APP2
    3 APP3
    4 APP4 OK
    5 APP5 OK
    6 APP6

    A mon avis il faut faire une boucle mais je ne vois pas où la placer ....

    Un peu d'aide svp ... Merci d'avance .....

  2. #2
    Membre émérite Avatar de patrickbaras
    Homme Profil pro
    Informaticien (à sa mémère).
    Inscrit en
    Septembre 2010
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien (à sa mémère).
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Par défaut
    faire une seule equête "left join" et vérifier si la valeur est null
    exemple

    table APP
    ID APP
    1 APP1
    2 APP2
    3 APP3
    4 APP4
    5 APP5

    table SERVER:
    ID SERVER APP
    1 SERV1 APP1
    2 SERV2 APP3
    3 SERV3 APP5

    la requête:
    SELECT
    APP.APP
    ,if(isnull(SERVER.SERVER),"","OK") as STAT
    FROM
    APP
    left join
    SERVER
    on
    APP.APP = SERVER.APP

    le résultat
    APP STAT
    APP1 OK
    APP2
    APP3 OK
    APP4
    APP5 OK

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2012
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 284
    Par défaut
    Merci patrick pour ta réponse ...

    La syntaxe ne fonctionne pas sous mysql

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT 
    APPLICATION.NAME_APP
    ,if(isnull(SERVER.NAME_SERVER),"","OK") as STAT
    FROM 
    APPLICATION
    left join 
    SERVER
    on 
    APPLICATION.NAME_APP = SERVER.NAME_APP;
    Une idée ou je dois revoir mes cours ? merci !!!!!!!!!!

  4. #4
    Membre émérite Avatar de patrickbaras
    Homme Profil pro
    Informaticien (à sa mémère).
    Inscrit en
    Septembre 2010
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien (à sa mémère).
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Par défaut
    évidement ma requête ne fonctionne qu'avec les tables (minimalistes) que je décris , tu dois adapter le principe à tes tables. (mais j'ai testé sous mysql et cela fonctionne)

    SELECT
    la_colonne_avec_le_nom_de_l'application
    ,if(isnull(table_des_serveurs.colonne_du_nom_de_serveur),"","OK") as STAT
    FROM
    table_des_applications
    left join
    table_des_serveurs
    on
    table_des_applications.colonne_de_l_id_de_l_application = table_des_serveurs.colonne_de_l_id_de_l_application

  5. #5
    Membre éclairé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2012
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 284
    Par défaut
    ok donc j'ai mes 3 tables : SERVER, APPLICATION + HOST pour relier les deux :

    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
     
    CREATE TABLE SERVER (
    ID_SERVER INT NOT NULL AUTO_INCREMENT,
    NAME_SERVER  VARCHAR(50) NOT NULL,
    DESC_SERVER VARCHAR(500),
    COM_SERVER VARCHAR(500),
    DATE_SERVER TIMESTAMP NOT NULL DEFAULT NOW(),
    IP_REQ_SERVER VARCHAR(50),
    PRIMARY KEY (ID_SERVER),
    UNIQUE KEY (NAME_SERVER)
    );
     
    CREATE TABLE APPLICATION (
    ID_APP INT NOT NULL AUTO_INCREMENT,
    NAME_APP VARCHAR(50) NOT NULL,
    DESC_APP VARCHAR(500),
    DOC_APP VARCHAR(500),
    COM_APP VARCHAR(500),
    CODE_APP VARCHAR(500),
    DATE_APP TIMESTAMP NOT NULL DEFAULT NOW(),
    IP_REQ_APP VARCHAR(50),
    PRIMARY KEY (ID_APP),
    UNIQUE KEY (NAME_APP)
    );
     
    CREATE TABLE HOST (
    ID_SERVER INT NOT NULL,
    ID_APP INT NOT NULL,
    FOREIGN KEY (ID_SERVER) REFERENCES SERVER(ID_SERVER),
    FOREIGN KEY (ID_APP) REFERENCES APPLICATION(ID_APP),
    PRIMARY KEY (ID_SERVER, ID_APP)
    );
    SERVER
    +-----------+-------------+
    | id_server | name_server |
    +-----------+-------------+
    | 1 | AUCUN |
    | 2 | SRVDEMO |
    | 4 | SRVTATA |
    | 3 | SRVTOTO |
    +-----------+-------------+

    APPLICATION
    +--------+----------+
    | id_app | name_app |
    +--------+----------+
    | 2 | APP1 |
    | 3 | APP2 |
    | 4 | APP3 |
    | 5 | APP4 |
    | 6 | APP5 |
    | 7 | APP6 |
    | 1 | AUCUN |
    +--------+----------+

    HOST
    +-----------+--------+
    | ID_SERVER | ID_APP |
    +-----------+--------+
    | 2 | 2 |
    | 3 | 3 |
    | 4 | 3 |
    | 3 | 4 |
    | 2 | 5 |
    | 2 | 6 |
    | 4 | 6 |
    +-----------+--------+



    Comment faire ma requete qui va bien ?

    Ce que je voudrais c'est afficher ma liste totale des applications et lorsque qu'une application est liée à mon serveur afficher un OK par exemple.

    SRVDEMO :

    1 AUCUN
    2 APP1 OK
    3 APP2
    4 APP3
    5 APP4 OK
    6 APP5 OK
    7 APP6

    SI tu as la syntaxe je suis preneur car la je suis complètement bloqué ...

    Merci d'avance encore une fois

  6. #6
    Membre émérite Avatar de patrickbaras
    Homme Profil pro
    Informaticien (à sa mémère).
    Inscrit en
    Septembre 2010
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien (à sa mémère).
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT
    APPLICATION.NAME_APP
    ,APPLICATION.ID_APP
    ,T1.NAME_SERVER
    ,if(isnull(T1.NAME_SERVER),"","OK") as STAT
    FROM
    APPLICATION
    left join
    (SELECT  SERVER.NAME_SERVER , HOST.ID_APP FROM `HOST`,SERVER WHERE  HOST.ID_SERVER=SERVER.ID_SERVER) AS T1
    on
    APPLICATION.ID_APP = T1.ID_APP
    resultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    NAME_APP   ID_APP       NAME_SERVER      STAT
    APP1 	   2 	        SRVDEMO          OK
    APP2 	   3 	        SRVTOTO          OK
    APP2 	   3 	        SRVTATA          OK
    APP3 	   4  	        SRVTOTO          OK
    APP4 	   5  	        SRVDEMO          OK
    APP5 	   6  	        SRVDEMO          OK
    APP5 	   6 	        SRVTATA          OK
               1            NULL	
    APP6 	   7  	        NULL
    j'ai ajouté comme données pour tester
    les données de ton post
    + APP6 avec ID=7
    + SRV_FAKE avec ID=5
    pour avoir une application et un server qui ne sont pas liés par HOST

  7. #7
    Membre éclairé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2012
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 284
    Par défaut
    Merci patrick tu déchires !!!!!!!!!!!!!!

    Au final je n'ai pas besoin de la colonne STAT, je vais me baser sur la valeur NULL.

    La jointure est donc celle la :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT
    APPLICATION.NAME_APP,APPLICATION.ID_APP,T1.NAME_SERVER
    FROM
    APPLICATION
    left join
    (SELECT  SERVER.NAME_SERVER , HOST.ID_APP FROM `HOST`,SERVER WHERE  HOST.ID_SERVER=SERVER.ID_SERVER
    AND SERVER.NAME_SERVER ="SRVDEMO") AS T1
    on
    APPLICATION.ID_APP = T1.ID_APP;
    Ce qui donne pour mon serveur SRVDEMO :

    +----------+--------+-------------+
    | NAME_APP | ID_APP | NAME_SERVER |
    +----------+--------+-------------+
    | APP1 | 1 | SRVDEMO |
    | APP2 | 2 | NULL |
    | APP3 | 3 | NULL |
    | APP4 | 4 | SRVDEMO |
    | APP5 | 5 | SRVDEMO |
    | APP6 | 6 | NULL |
    +----------+--------+-------------+

    Sujet résolu, il n'y a plus qu' a mettre ca en php

    Merci beaucoup encore ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 10
    Dernier message: 11/08/2009, 14h43
  2. [SQL] Afficher les données d'une requete SQL
    Par griese dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 22/06/2006, 11h22
  3. [Excel] Comment afficher les données d'un fichier Excel (PHP)
    Par pierrot10 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 11/05/2006, 15h01
  4. Réponses: 6
    Dernier message: 06/04/2006, 20h52
  5. [MySQL] Une liste déroulante affichant les données d'une requête SHOW par ordre alphabétique
    Par jack_1981 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 22/12/2005, 15h53

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