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 :

Select sur 2 tables dans une boucle?


Sujet :

PHP & Base de données

  1. #1
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 584
    Points : 235
    Points
    235
    Par défaut Select sur 2 tables dans une boucle?
    Bonjour,

    Voici ma structure sql raccourci :
    Table t_journee
    id_journee | date

    Table t_volontaires
    id_journee | id_volontaire

    En fait l'administrateur créé une journée de formation.
    Ensuite les volontaires s'inscrivent.

    A l'heure actuelle, dans la partie administrateur je fais une requète avec une boucle pour récupérer les dates des journées de formation.
    Et dans la boucle while, je fais une requète pour récupérer les volontaires de la journée en question.

    Ca fonctionne trés bien.

    Mais n'y à t'il pas un moyen d'éviter de faire une requête dans une boucle?

    Merci pour votre réponse.

  2. #2
    Expert éminent sénior

    Avatar de FirePrawn
    Homme Profil pro
    Consultant technique
    Inscrit en
    Mars 2011
    Messages
    3 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant technique

    Informations forums :
    Inscription : Mars 2011
    Messages : 3 179
    Points : 19 373
    Points
    19 373
    Par défaut
    Bonjour,

    Montre nous ton code actuel peut-être ?

  3. #3
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    A priori, tu dois pouvoir faire ça avec une jointure, mais ça implique que tu auras autant de lignes que de participants par journée. Donc ça dépend essentiellement de ce que tu fais du résultat de ces requêtes.

  4. #4
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 584
    Points : 235
    Points
    235
    Par défaut
    Voici un bout de code:

    Code php : 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
     
    <?
    $sql = "SELECT *
    FROM t_instruction
    ORDER BY date_d ASC";
    $req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>' . mysql_error());
    $true = mysql_num_rows($req);
    if ($true == 0 ) exit;
    $i = 0;	
    $active = 0;
    while ($result = mysql_fetch_array ($req))
    {
     
    $sql2 = "SELECT reservistes.id_res, reservistes.nom, grades.grades as grade
    	FROM t_instruction_candidats
    	LEFT JOIN reservistes ON t_instruction_candidats.id_res = reservistes.id_res
    	LEFT JOIN grades ON reservistes.id_grades = grades.id_grades
    	WHERE id_instruction = '".$result['id_instruction']."'
    	ORDER BY nom ASC";
    	$req2 = mysql_query($sql2) or die('Erreur SQL !'.$sql2.'<br>' . mysql_error());
     
    echo "<h3><a href=\"#\">".$tab_jours[$jour]." ".datefr($result['date_d'])." - ".$nbr_inscrit." inscrit(s) pour ".$result['nbr_candidats']." places</a></h3>";
     
    while ($result2 = mysql_fetch_array ($req2))
    	{
    		?>
            <li><? echo $result2['nom'];?> (<? echo $result2['grade'];?>) <a href="index_admin.php?page=admin_instruction.php&id_instruction=<? echo $result['id_instruction'];?>&id_res=<? echo $result2['id_res'];?>=&supp_res=1" onclick="return doconfirm('Ceci supprimera le réserviste de l\'instruction.');"><img src="images/Delete.png" width="15" height="15" title="Supprimer"></a></li>
            <?
    	}
    }

  5. #5
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Tu peux effectivement tout récupérer dans une seule requête. Il suffit de trier des résultats de façon à regrouper chaque instruction et de mettre un filtre pour n'afficher chaque entête qu'une seule fois :
    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
    <?
    $sql = "SELECT t_instruction.id_instruction, t_instruction.date_d, t_instruction.nbr_candidats, reservistes.id_res, reservistes.nom, grades.grades as grade
            FROM t_instruction 
            INNER JOIN t_instruction_candidats ON t_instruction.id_instruction = t_instruction_candidats.id_instruction
            LEFT JOIN reservistes ON t_instruction_candidats.id_res = reservistes.id_res
            LEFT JOIN grades ON reservistes.id_grades = grades.id_grades
            ORDER BY date_d ASC, t_instruction.id_instruction ASC, nom ASC";
    $true = mysql_num_rows($req);
    if ($true == 0 ) exit;
    $id_courant = null;
    while ($result = mysql_fetch_array ($req)) {
        // si on a change de groupe
        if ($id_courant != $result['id_instruction']) {
            echo "<h3><a href=\"#\">".$tab_jours[$jour]." ".datefr($result['date_d'])." - ".$nbr_inscrit." inscrit(s) pour ".$result['nbr_candidats']." places</a></h3>";
            $id_courant = $result['id_instruction'];
        }
        //affichage du candidat
        ?>
        <li><? echo $result['nom'];?> (<? echo $result['grade'];?>) <a href="index_admin.php?page=admin_instruction.php&id_instruction=<? echo $result['id_instruction'];?>&id_res=<? echo $result['id_res'];?>=&supp_res=1" onclick="return doconfirm('Ceci supprimera le réserviste de l\'instruction.');"><img src="images/Delete.png" width="15" height="15" title="Supprimer"></a></li>
        <?
    }
    Au passage, je pense que dans ton lien tu veux parler de "réservation" et non de "réserviste"

  6. #6
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 584
    Points : 235
    Points
    235
    Par défaut
    Merci pour ta réponse.

    J'ai eu un contact avec l'administrateur, et il aimerai avec une seul requète pouvoir faire exporter à partir de phpmyadmin.

    Donc est t'il possible de rajouter les différentes lignes de la seconde table en colonne à la première?

    par exemple :

    id_journée | date | id_volontaire | idvolontaire | id_volontaire... jusqu'a ce que tous les volontaires s'affichent?

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    338
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 338
    Points : 192
    Points
    192
    Par défaut
    Je crois que si tu fais un SELECT * sa devrais marcher

  8. #8
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 584
    Points : 235
    Points
    235
    Par défaut
    Le soucis c'est que les id_volontaire sont dans une seconde table.

  9. #9
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2011
    Messages : 3
    Points : 4
    Points
    4
    Par défaut A/s requete
    bonsoir a tt

    désole je suis débutant je sais pas comment vous explique ce que je veux .mais j'ess
    j'ai :
    1-le premier tableau sur une feuille exel contient( code- nom- prénom -date de naissance.......etc )
    2-le deuxième tableau tjrs sur un autre feuille exel contient (code-date d’entrée -date de sortie.......etc )
    je veux créer une 3eme feuille qui regrouper tous les informations (code- nom- prénom -date naissance-date d’entrée -date de sortie..........)
    merci d'avance

  10. #10
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par trezo Voir le message
    bonsoir a tt

    désole je suis débutant je sais pas comment vous explique ce que je veux .mais j'ess
    j'ai :
    1-le premier tableau sur une feuille exel contient( code- nom- prénom -date de naissance.......etc )
    2-le deuxième tableau tjrs sur un autre feuille exel contient (code-date d’entrée -date de sortie.......etc )
    je veux créer une 3eme feuille qui regrouper tous les informations (code- nom- prénom -date naissance-date d’entrée -date de sortie..........)
    merci d'avance
    Bonjour,
    euh, question : je parie que la 3ème feuille est sur Excel, non ?
    Si oui, ce n'est pas le bon forum ici c'est le forum PHP, et c'est le forum Excel

Discussions similaires

  1. function sur un movieclip dans une boucle for
    Par totof49 dans le forum ActionScript 1 & ActionScript 2
    Réponses: 0
    Dernier message: 22/08/2009, 16h28
  2. [MySQL] Problème différentiation des lignes d'une table dans une boucle
    Par ppioul dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 03/05/2008, 18h21
  3. Binding sur <h:inputText> dans une boucle
    Par danyboy85 dans le forum JSF
    Réponses: 6
    Dernier message: 29/05/2007, 11h16
  4. manipuler une table dans une boucle.
    Par DonQuiShoote dans le forum Access
    Réponses: 13
    Dernier message: 28/02/2007, 08h05
  5. Réponses: 14
    Dernier message: 25/06/2006, 19h18

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