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 :

Extraction et fragmentation des résultats d'une requête [Oracle]


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4
    Par défaut Extraction et fragmentation des résultats d'une requête
    Bonjour a tous,

    Suis pas encore très à l'aise avec php , mais j'ai réussi a monter une BDD pour un annuaire avec + 900 noms, pourtant je reste sans solution malgré des recherches depuis plusieurs jours...J'aimerai savoir s'il est possible de fragmenter les résultats d'une requête sur une page php. Je m'explique ...cela va être complique....
    je travaille sur une page qui reprend la liste des noms, prénoms et numéro de tel de 30 personnes, ces personnes travaillent dans des services différents.

    exemple:

    SOCIETE dupont et durand (=structure)


    Accueil (=service)
    Nom prenom bureau tel (= agent)

    -----------------------------------------

    Comptabilite
    Nom2 prenom2 bureau2 tel2
    Nom3 prenom3 bureau3 tel3
    Nom4 prenom4 bureau4 tel4


    ---------------------------------------

    Courrier
    Nom5 prenom5 bureau5 tel5
    Nom6....etc...

    ---------------------------------------
    J'ai reussi a faire une requete qui reprend l'ensemble des personnes qui travaillent sur le site


    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
    <?php
    mysql_select_db($Annuaire);
    $query_Recordset1= "SELECT Agents.Nom, Agents.Prenom, Telephone.Numero
    FROM Telephone INNER JOIN (Structure INNER JOIN (Service INNER JOIN Agents ON Service.serviceID = Agents.ServiceID) ON Structure.StructureID = Agents.StructureID) ON Telephone.TelephoneID = Agents.TelephoneID
    ORDER BY Agents.Nom";
    $Recordset1 = mysql_query($query_Recordset1) or die(mysql_error());
    $row_Recordset1 = mysql_fetch_array($Recordset1);
    $totalRows_Recordset1 = mysql_num_rows($Recordset1);
    ?>
     
    <?php do { ?>
             <tr>
             <td><?php echo $row_Recordset1['Nom']; ?></td>
             <td><?php echo $row_Recordset1['Prenom']; ?></td>
            <td><?php echo $row_Recordset1['Bureau']; ?></td>
            <td><?php echo $row_Recordset1['Numero']; ?></td>
            </tr>
     <?php } while ($row_Recordset1 = mysql_fetch_assoc($Recordset1)); ?>
    Question : existe t il un moyen (sans utiliser LIMIT) de faire a partir de la requête $query_Recordset1 une extraction plus fine, par service ou vais je devoir faire une requête pour avoir la listes des agents dans chacun des services (requête agents accueil, requête agents courrier...)??

    Merci d'avance...

  2. #2
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Décembre 2004
    Messages : 42
    Par défaut
    Sans être un expert, je dirais qu'il est possible de le faire.

    Je te propose une piste que j'utilise : dans ma requête, j'ajoute une condition supplémentaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WHERE ServiceID='$service' ou
    WHERE ServiceID='Comptabilite'
    Pour obtenir la variable '$service', il suffit de créer un formulaire avec une liste déroulante avec les différents services. En validant, tu obtiens une requête qu'avec les membres de ce service.

  3. #3
    Membre averti
    Inscrit en
    Août 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 17
    Par défaut
    Salut, il y a aussi une autre solution.

    Dans ta requete tu ordonne par tes criteres :
    1)Service
    2)Nom
    3)Prénom

    ce qui implique que tu dois récupérer le service dans les infos et donne :
    "order by Service.serviceID(libellé c'est encore mieux si possible), Agents.Nom, Agents.Prenom"

    Faut donc remanipuler la requete mais travaillant sous oracle je ne l'aurais pas monter pareil et je peux pas trop te dire si ma version serait correcte avec ta bdd.

    Ainsi dans ta boucle, des que tu changes de serviceID(ou lib), tu recréé une 'entete service'.

    En espérant que ca t'aide et que j'ai été suffisemment clair.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4
    Par défaut
    Bonjour,

    Heuuu je n'ai pas tout suivi la...

    Citation Envoyé par Papouille
    Salut, il y a aussi une autre solution.

    Dans ta requete tu ordonne par tes criteres :
    1)Service
    2)Nom
    3)Prénom

    ce qui implique que tu dois récupérer le service dans les infos et donne :
    "order by Service.serviceID(libellé c'est encore mieux si possible), Agents.Nom, Agents.Prenom"

    Faut donc remanipuler la requete mais travaillant sous oracle je ne l'aurais pas monter pareil et je peux pas trop te dire si ma version serait correcte avec ta bdd.

    Ainsi dans ta boucle, des que tu changes de serviceID(ou lib), tu recréé une 'entete service'.

    En espérant que ca t'aide et que j'ai été suffisemment clair.

  5. #5
    Membre averti
    Inscrit en
    Août 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 17
    Par défaut
    Citation Envoyé par lancelotparis
    Bonjour,

    Heuuu je n'ai pas tout suivi la...
    Je vais essayer d'être plus clair :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select AGENTS.nom, AGENTS.prenom, TELEPHONE.numero, BUREAU.BUREAU, SERVICE.SERVICELIBELLE from AGENTS, TELEPHONE, BUREAU, SERVICE WHERE Service.serviceID = Agents.ServiceID AND Telephone.TelephoneID = Agents.TelephoneID AND Structure.StructureID = Agents.StructureID AND BUREAU.BureauID = Agents.BureauID AND Structure.StructureID = 15
    ORDER BY SERVICE.SERVICELIBELLE, AGENTS.nom, AGENTS.prenom

    Cette requete fonctionne sous ORACLE. Je ne sais pas si c'est possible sous mysql mais tu dois pouvoir la traduire si c'est pas le cas.

    Le principe c'est que sur chaque ligne d'enregistrement tu as le SERVICELIBELLE renseigné et classé en top priorité.
    Du coup tu fais une boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php do { ?>
    <?php if($row_Recordset1['SERVICELIBELLE']!= $OLD_SERVICELIBELLE){?>
    <tr>
      <td colspan=4><b><?php echo $row_Recordset1['Nom']; ?></b></td>
    </tr>
    <? $OLD_SERVICELIBELLE= $row_Recordset1['SERVICELIBELLE']?>
    <?} ?>
    <tr>
    <td><?php echo $row_Recordset1['Nom']; ?></td>
    <td><?php echo $row_Recordset1['Prenom']; ?></td>
    <td><?php echo $row_Recordset1['Bureau']; ?></td>
    <td><?php echo $row_Recordset1['Numero']; ?></td>
    </tr>
    <?php } while ($row_Recordset1 = mysql_fetch_assoc($Recordset1)); ?>
    Tu me suis mieux ??? j'ai toujours été nul en explication

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4
    Par défaut
    Comme je suis encore moins doue que toi, il me faut des precisions...tu rajoutes where dans la requete ?

    Citation Envoyé par rico the hobbit
    Sans être un expert, je dirais qu'il est possible de le faire.

    Je te propose une piste que j'utilise : dans ma requête, j'ajoute une condition supplémentaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WHERE ServiceID='$service' ou
    WHERE ServiceID='Comptabilite'
    Pour obtenir la variable '$service', il suffit de créer un formulaire avec une liste déroulante avec les différents services. En validant, tu obtiens une requête qu'avec les membres de ce service.

  7. #7
    Membre averti
    Inscrit en
    Août 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 17
    Par défaut
    Non pas son 'where' à lui car sinon tu limites la recherche à 1 service. Il te proposait cela avec une solution sur plusieurs pages(1 page par service en gros).

    rajoute mon where a moi. Ca equivaut a tes "ON Telephone.TelephoneID = Agents.TelephoneID".

    Tu créés en fait une requete en joignant les tables avec des 'inner join' en te basant sur les id (liaisons). Tu peux faire comme ça aussi mais quoi qu'il en soit faut que tu récupères le libellé de la société (structure) et que tu fasses un order by avec le societeLib en premier ...

    On va y arriver.

  8. #8
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Décembre 2004
    Messages : 42
    Par défaut
    J'utilise la même méthode que Papouille pour lancer une requête MySQL. Voici ce que donne la formule de Papouille en PHP / MySQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $result = mysql_query ("SELECT AGENTS.nom, AGENTS.prenom, TELEPHONE.numero, BUREAU.BUREAU, SERVICE.SERVICELIBELLE FROM AGENTS, TELEPHONE, BUREAU, SERVICE WHERE Service.serviceID = Agents.ServiceID AND Telephone.TelephoneID = Agents.TelephoneID AND Structure.StructureID = Agents.StructureID AND BUREAU.BureauID = Agents.BureauID AND Structure.StructureID = 15
    ORDER BY SERVICE.SERVICELIBELLE, AGENTS.nom, AGENTS.prenom");
    Une question Papouille : à quoi correspondent tes variables : $row_Recordset1 et $OLD_SERVICELIBELLE ?

  9. #9
    Membre averti
    Inscrit en
    Août 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 17
    Par défaut
    Re ...

    le $row_Recordset1 fait parti du code initial lors de la boucle afin de repérer lorsque le recordset est vide.

    Pour le $OLD_SERVICELIBELLE, c'est juste une petite astuce. Tu gardes le nom du service en question d'une ligne a l'autre. Ainsi a chaque debut de boucle tu regardes si le libellé du service actuel est identique a celui d'avant.
    Si oui alors on affiche pas d'entete avec le libellé du service(on continue a lister les gens).
    Si non on créé un entete de libellé.

    Au final on a une page divisé en service et pour chaque service la liste des gens en dessous.

    Evidemment tout ca ne marche que lorsque la requete a un order by ServiceLib, AgentNom

    Et voila...

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4
    Par défaut Merci...beaucoup
    Merci beaucoup de ton aide precieuse...avec beaucoup de retard !!!

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

Discussions similaires

  1. Numérotation automatique des résultats d'une requête
    Par Nicola dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 28/07/2006, 19h57
  2. Réponses: 2
    Dernier message: 02/12/2005, 21h21
  3. Réponses: 1
    Dernier message: 02/12/2005, 20h18
  4. Pagination des résultats d'une requête
    Par dl_jarod dans le forum ASP
    Réponses: 2
    Dernier message: 17/10/2005, 14h30
  5. Calcul à partir des résultats d'une requète
    Par Sendo dans le forum Access
    Réponses: 1
    Dernier message: 29/09/2005, 17h46

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