Bonjour,


...
                            $req1 = mysql_query ($sql1) or die (mysql_error());

                            // s'il y a des résultats

                            $i = 1;
                            while ($result = mysql_fetch_array($req1)){
                                echo " résultat trouvé ".$result["ID"]." ";
                                echo "<br/>";
                                $i++;
                            }

        }
    }

Ce code permet d'afficher une liste de résultats ... il fonctionne ...

Je souhaite ensuite faire une vérification pour chacun de ces résultats

...
                            $req1 = mysql_query ($sql1) or die (mysql_error());

                            // s'il y a des résultats

                            $i = 1;
                            while ($result = mysql_fetch_array($req1)){
                                echo " r&eacute;sultat trouv&eacute; ".$result["ID"]." ";

                                    $sql6 = mysql_query ("SELECT * from alerte WHERE Numero_Alerte = ".$Dans_Alerte["Numero_Alerte"]." AND ID_de__anonce_deja_envoye = ".$result["ID"]);
                                    $req6  = mysql_query($sql6) or die(mysql_error());
                                    $data6 = mysql_fetch_assoc($req6);
                                    if (isset($data6["Numero_Alerte"])){ echo $result["ID"]." d&eacute;j&agrave; propos&eacute; pour ".$data["Numero_Alerte"]." ";}
                                    if (!isset($data6["Numero_Alerte"])){ echo $result["ID"]." peut &ecirc;tre propos&eacute; pour ".$data["Numero_Alerte"]." ";}
                                    mysql_close($sql6);

                                echo "<br/>";
                                $i++;
                            }

        }
    }

C'est à dire que pour chaque résultat, je dois faire un SELECT pour faire une vérification... sauf quand le code suit la boucle et qu'il arrive la première fois sur le SELECT, il s'arrête là, et le reste de la boucle n'est pas affiché ni même d'ailleur le reste de la page...

Auriez vous une idée ?

Merci par avance pour votre aide

8 réponses


Axis
Réponse acceptée

Bonjour,

Pourquoi ne pas faire une jointure directement sur la premiere requete ?

Bonjour Axis,
Parce que les données sont sur la même table

Du coup tu me fais douter... j'ai la possiblité de stocker les données dans une autre table...
Je me dit que ça bloque peut être justement le Select qui effectue la dernière vérification interoge la même table que la boucle de résultat ????

qu'en pensez vous ?

Peux tu nous donner tes 2 requetes ?

voici le code entier :

echo "Liste des r&eacute;sultats possibles :<br/>";

    $req2 = mysql_query ("SELECT * from alerte WHERE ID_de__anonce_deja_envoye = '' ");
        while ($Dans_Alerte = mysql_fetch_array($req2)) {

        if (!empty ($Dans_Alerte["alerte_mail"])){ 

                            $sql1 = "SELECT * FROM gtable WHERE valide = 1 AND titre LIKE '%".$Dans_Alerte['R']."%' ";

                            //Si Cat est spécifié
                            if ($Dans_Alerte["categorie"] != 'cat'){
                                $sql1.= " AND categorie = '".$Dans_Alerte['categorie']."'";
                            }   

                            //Si MRC est vide
                            if ($Dans_Alerte["MRC"] == ''){
                                if ($Dans_Alerte["Code_grande_region"] == 1){
                            $sql1.= " AND (mrc = '1' OR mrc = '2' OR mrc = '43' OR mrc = '95' OR mrc = '100') ";
                                }
                                if ($Dans_Alerte["Code_grande_region"] == 2){
                            $sql1.= "AND (mrc = '46' OR mrc = '48' OR mrc = '49' OR mrc = '74' OR mrc = '96')  ";
                                }
                                if ($Dans_Alerte["Code_grande_region"] == 3){
                            $sql1.= "AND (mrc = '15' OR mrc = '16' OR mrc = '29' OR mrc = '31' OR mrc = '36' OR mrc = '88' OR mrc = '89')  ";
                                }
                                if ($Dans_Alerte["Code_grande_region"] == 4){
                            $sql1.= "AND (mrc = '42' OR mrc = '59' OR mrc = '75' OR mrc = '77' OR mrc = '98' OR mrc = '103')  ";
                                }
                                if ($Dans_Alerte["Code_grande_region"] == 5){
                            $sql1.= "AND (mrc = '17' OR mrc = '51' OR mrc = '53' OR mrc = '56' OR mrc = '68' OR mrc = '78' OR mrc = '99')  ";
                                }           
                                if ($Dans_Alerte["Code_grande_region"] == 6){
                            $sql1.= "AND mrc = '83'  ";
                                }   
                                if ($Dans_Alerte["Code_grande_region"] == 7){
                            $sql1.= "AND (mrc = '22' OR mrc = '44' OR mrc = '60' OR mrc = '85' OR mrc = '87')  ";
                                }
                                if ($Dans_Alerte["Code_grande_region"] == 8){
                            $sql1.= "AND (mrc = '1' OR mrc = '2' OR mrc = '43' OR mrc = '95' OR mrc = '100')  ";
                                }
                                if ($Dans_Alerte["Code_grande_region"] == 9){
                            $sql1.= "AND (mrc = '14' OR mrc = '33' OR mrc = '50' OR mrc = '72' OR mrc = '79' OR mrc = '97')  ";
                                }
                                if ($Dans_Alerte["Code_grande_region"] == 10){
                            $sql1.= "AND (mrc = '21' OR mrc = '23' OR mrc = '26')  ";
                                }   
                                if ($Dans_Alerte["Code_grande_region"] == 11){
                            $sql1.= "AND (mrc = '7' OR mrc = '12' OR mrc = '32' OR mrc = '34' OR mrc = '55' OR mrc = '62')  ";
                                }
                                if ($Dans_Alerte["Code_grande_region"] == 12){
                            $sql1.= "AND (mrc = '8' OR mrc = '11' OR mrc = '30' OR mrc = '40' OR mrc = '57' OR mrc = '61' OR mrc = '69' OR mrc = '71' OR mrc = '82' OR mrc = '92')  ";
                                }
                                if ($Dans_Alerte["Code_grande_region"] == 13){
                            $sql1.= "AND mrc = '47'  ";
                                }   
                                if ($Dans_Alerte["Code_grande_region"] == 14){
                            $sql1.= "AND (mrc = '18' OR mrc = '24' OR mrc = '27' OR mrc = '66' OR mrc = '76' OR mrc = '81')  ";
                                }   
                                if ($Dans_Alerte["Code_grande_region"] == 15){
                            $sql1.= "AND (mrc = '4' OR mrc = '5' OR mrc = '19' OR mrc = '41' OR mrc = '64' OR mrc = '67' OR mrc = '80' OR mrc = '102')  ";
                                }   
                                if ($Dans_Alerte["Code_grande_region"] == 16){
                            $sql1.= "AND (mrc = '3' OR mrc = '9' OR mrc = '13' OR mrc = '35' OR mrc = '45' OR mrc = '52' OR mrc = '54' OR mrc = '63' OR mrc = '65' OR mrc = '70' OR mrc = '73' OR mrc = '86' OR mrc = '93' OR mrc = '94' OR mrc = '104')  ";
                                }   
                                if ($Dans_Alerte["Code_grande_region"] == 17){
                            $sql1.= "AND (mrc = '6' OR mrc = '10' OR mrc = '20' OR mrc = '28' OR mrc = '84')  ";
                                }           
                            }   

                            //Si MRC n'est pas vide
                            if ($Dans_Alerte["MRC"] != ''){
                                $sql1.= " AND mrc = '".$Dans_Alerte['MRC']."'";
                            }   

                            //Si MUN est spécifié
                            if ($Dans_Alerte["MUN"] != ''){
                                $sql1.= " AND municipalite = '".$Dans_Alerte['MUN']."'";
                            }       

                            if ($Dans_Alerte["alerte_v"] == 'on'){
                                $v= 'v';
                            }
                            if ($Dans_Alerte["alerte_l"] == 'on'){
                                $l = 'l';
                            }
                            if ($Dans_Alerte["alerte_p"] == 'on'){
                                $p = 'p';
                            }
echo "<b>".$Dans_Alerte["Numero_Alerte"]." </b>";

echo $sql1;

                            $req1 = mysql_query ($sql1) or die (mysql_error());

                            // s'il y a des résultats

                            $i = 1;
                            while ($result = mysql_fetch_array($req1)){
                                echo " r&eacute;sultat trouv&eacute; ".$result["ID"]." ";

                                    $sql6 = mysql_query ("SELECT * from alerte WHERE Numero_Alerte = ".$Dans_Alerte["Numero_Alerte"]." AND ID_de__anonce_deja_envoye = ".$result["ID"]);
                                    $req6  = mysql_query($sql6) or die(mysql_error());
                                    $data6 = mysql_fetch_assoc($req6);
                                    if (isset($data6["Numero_Alerte"])){ echo $result["ID"]." d&eacute;j&agrave; propos&eacute; pour ".$data["Numero_Alerte"]." ";}
                                    if (!isset($data6["Numero_Alerte"])){ echo $result["ID"]." peut &ecirc;tre propos&eacute; pour ".$data["Numero_Alerte"]." ";}
                                    mysql_close($sql6);

                                echo "<br/>";
                                $i++;
                            }

        }
    }

En fait dès que je met une requete dans la boucle while, la lecture du code s'arrête là... si je met un echo ça fonctionne ... je vois pas ce qui cloche...

Oui car vous faite une requête avec le résultat d'une autre.
La seconde ligne est erronée.

$sql6 = mysql_query ("SELECT * from alerte WHERE Numero_Alerte = ".$Dans_Alerte["Numero_Alerte"]." AND ID_de__anonce_deja_envoye = ".$result["ID"]);
                                    $req6  = mysql_query($sql6) or die(mysql_error());

Juste après vous pourriez simplifier le if(!isset... et if(isset... par un if(!isset... else...

Oui ce n'est pas la bonne méthode, en fait, il faut separer les données sur deux tables puis faire une jointure...

Merci de m'avoir aidé