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 :

Problème de requête et boucle [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5
    Par défaut Problème de requête et boucle
    Bonjour, j'essaye de faire un mini site d'annonces immobilières, n'étant pas un expert en php, j'y vais en tâtonnant...

    J'ai une table annonces, une table localites et une table types (bureaux, terrains etc...)

    Le menu du site doit donner la possibilité de lister les annonces :
    1. de bureaux
    2. d'entreôts
    3. de terrains

    Je fais passer cette variable en tant que "id" et le récupère dans ma requete.

    J'arrive a obtenir les annonces en rapport avec la variable "id" mais le problème est que même s'il n'y a pas d'annonces en rapport avec "id" dans une localité, cette localité s'affiche quand même.

    J'ai essayé plusieurs manières différentes mais je tourne en rond et mes compétences me limitent.

    Je vous laisse ci-dessous mes requetes et boucles en espérant que vous pourrez m'éclairer.

    Merci d'avance

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    <?php
    $longueur = 5000;
     
     
     
    	if ($_GET['page']>0)
    	{
     	$min=($_GET['page']*5);
    	}
    	else
    	{
     	$min=0;
    	}
     
     
     
    		$resultat = mysql_db_query("$base","SELECT * FROM localites ORDER BY localites_nom ASC LIMIT $min ,5",$connexion);
    		$num = mysql_num_rows($resultat);
    		$i=0;
    		while($i<$num)
    		 {
    			$localites_id = mysql_result($resultat,$i,"localites_id");
    			$localites_nom = mysql_result($resultat,$i,"localites_nom");
    			$localites_texte = mysql_result($resultat,$i,"localites_texte");
    			$localites_photo_1 = mysql_result($resultat,$i,"localites_photo_1");
     
    				echo "<tr>";
    					echo "<td class=\"nomlocalite\" height=\"18\" valign=\"top\">$localites_nom</td>";
    				echo"</tr>";
    				echo "<tr>";
    					echo "<td width=\"100%\" height=\"1\"><img src=\"images/img-separ-annonces.gif\" border=\"0\" width=\"100%\" height=\"1\"></td>";
    				echo"</tr>";
    				echo "<tr>";
    					echo "<td valign=\"top\" width=\"100%\"><table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\"><tr><td valign=\"top\" width=\"160\"><img src=\"images/";
    					if ($localites_photo_1 != ""){
    					echo "$localites_photo_1";
    					}
    					else {
    					echo "carte-en-cours.gif";
    					}
    					echo "\" border=\"0\" width=\"160\" height=\"132\"></td><td valign=\"top\" width=\"100%\"><table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\">";
     
     
    				$resultat2 = mysql_db_query("$base","SELECT * FROM annonces WHERE annonces_active = 1 AND annonces_type = '$id' AND annonces_localite = '$localites_nom' ORDER BY annonces_date DESC LIMIT $min ,5",$connexion);
    				   $num2 = mysql_num_rows($resultat2);
    				   $j=0;
    				   while($j<$num2)
    					{
    						$annonces_id = mysql_result($resultat2,$j,"annonces_id");
    						$annonces_reference = mysql_result($resultat2,$j,"annonces_reference");
    						$annonces_titre = mysql_result($resultat2,$j,"annonces_titre");
    						$annonces_superficie = mysql_result($resultat2,$j,"annonces_superficie");
    						$annonces_localite = mysql_result($resultat2,$j,"annonces_localite");
    						$annonces_type = mysql_result($resultat2,$j,"annonces_type");
    						$annonces_locvente = mysql_result($resultat2,$j,"annonces_locvente");
    						$annonces_texte = mysql_result($resultat2,$j,"annonces_texte");
    						$annonces_date = mysql_result($resultat2,$j,"annonces_date");
    						$annonces_photo_1 = mysql_result($resultat2,$j,"annonces_photo_1");
     
     
     
    				?>
    après s'affichent mes annonces...

  2. #2
    Membre Expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Par défaut
    Salut,

    Ca correspond à quoi ta fameuse variable que tu transmets en tant que id ?

    Pour les requêtes tu te compliques pas mal la vie, je te conseille de lire ce tuto :
    http://eusebius.developpez.com/phpmysql-base/
    notamment la partie IV-B

    Bon courage.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5
    Par défaut
    Ma variable id est le type (bureaux, entrepots ou terrains) que je fais passer.

    En gros, j'ai un menu avec trois boutons, un "voir les bureaux", un autre "voir les entrepots" et un dernier "voir les terrains".

    Au clic sur l'un d'eux, j'affiche mes annonces du bureaux par exemple sous la forme :

    Localité 1
    Annonce 1
    Annonce 2

    Localité 2
    Annonce 1
    Annonce 2

    etc... et le problème est que Localité 3 s'affiche même s'il n'y a pas d'annonces...

  4. #4
    Membre Expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Par défaut
    Ok, alors je pense que le problème vient de ta requête de départ.

    Il serait plus judicieux d'avoir quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM annonces, localites WHERE annonces.id_localite = localites.id AND annonces.id_type = $id ORDER BY localites.nom ASC
    (il faut mettre les bons noms de champs)

    Et ensuite pour ton affichage tu parcours les résultats de ta requête, et tu fais attention aux changements de localité pour faire le traitement en conséquence.

    Une idée d'algo pour l'affichage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    localite_prec = ""
    TANT QUE enregistrements FAIRE
       SI localite != localite_precedente ALORS
          afficher localité
       FINSI
       afficher annonce
       localite_prec = localite
    FIN TANT QUE

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5
    Par défaut
    Merci beaucoup, je comprends l'idée, je vais essayer d'appliquer

  6. #6
    Membre Expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Par défaut
    Citation Envoyé par rike33
    Merci beaucoup, je comprends l'idée, je vais essayer d'appliquer
    Ok, tiens moi au courant, pense aussi au lien que je t'ai filé ça va grandement épurer ton code qui n'en sera que plus lisible et plus facilement débuggable donc

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5
    Par défaut
    Voilà où j'en suis et je bloque... je n'ai pas saisi ce que tu appelle "localite_precedente"...

    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
    36
    37
    38
    $resultat = mysql_db_query("$base","SELECT * FROM annonces, localites WHERE annonces.annonces_localite = localites.localites_nom AND annonces.annonces_type = '$id' ORDER BY localites.localites_nom ASC",$connexion);
    		$num = mysql_num_rows($resultat);
    		$i=0;
    		while($i<$num)
    		 {
     
    			$annonces_id = mysql_result($resultat,$i,"annonces_id");
    			$annonces_titre = mysql_result($resultat,$i,"annonces_titre");
    			$annonces_localite = mysql_result($resultat,$i,"annonces_localite");
    			$annonces_type = mysql_result($resultat,$i,"annonces_type");
    			$annonces_texte = mysql_result($resultat,$i,"annonces_texte");
     
     
     
     
     
    				$localite_prec = "";
     
    				if ($annonces_localite != $localite_prec){
    					echo $annonces_localite;
    					echo "<br><br>";
    				}
     
    				echo $annonces_titre;		
    				echo "<br>";
    				echo $annonces_type;
    				echo "<br>";
    				echo $annonces_texte;
    				echo "<br><br><br>";
    				$localite_prec = $annonces_localite;
     
     
     
     
     
    			$i++;
    			//break;
    			}

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Par défaut
    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
    resultat = mysql_db_query("$base","SELECT * FROM annonces, localites WHERE annonces.annonces_localite = localites.localites_nom AND annonces.annonces_type = '$id' ORDER BY localites.localites_nom ASC",$connexion);
     
    		while($res= mysql_fetch_array)
    		 {	
     
    				$localite_prec = "";
     
    				if ($res['annonces_localite'] != $localite_prec){
     
     
    					echo $res['annonces_localite'].'<br><br>'.$res['annonces_titre'].'<br>'.$res['annonces_type'].'<br>'.$res['annonces_texte'].'<br><br><br>';
     
    					}
     
    				$localite_prec = $res['annonces_localite'];
     
    			}
    plutot comme cela je pense

  9. #9
    Membre Expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Par défaut
    Problème résolu en MP... rike a oublié de mettre en

    Solution retenue :

    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
    $requete = "SELECT annonces.annonces_titre, annonces.annonces_type, annonces.annonces_texte, annonces_localites, localites.localites_nom FROM annonces, localites WHERE annonces.annonces_localite = localites.localites_nom AND annonces.annonces_type = '$id' ORDER BY localites.localites_nom ASC";
    $resultat = mysql_query($requete,$connexion) or die($requete . " - " . mysql_error());
    $localite_prec = "";
    while($tab = mysql_fetch_array($resultat))
     {
    	if ($tab['localites_nom'] != $localite_prec)
    		echo "<b><font color='red'>" . $tab['localites_nom'] . "</font></b><br/>";
     
    	echo $tab['annonces_titre'];		
    	echo "<br/>";
    	echo $tab['annonces_type'];
    	echo "<br/>";
    	echo $tab['annonces_texte'];
    	echo "<br/><br/>";
     
    	$localite_prec = $tab['annonces_localite'];
    }

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

Discussions similaires

  1. Problème de requête SQL dans une boucle While
    Par Astraya dans le forum VB.NET
    Réponses: 3
    Dernier message: 21/01/2009, 17h18
  2. Problème de requête dans une boucle avec ADOQuery
    Par Ekik dans le forum Bases de données
    Réponses: 8
    Dernier message: 14/05/2007, 16h07
  3. Problème de requètes concurentes
    Par Emmanuel.G dans le forum XMLRAD
    Réponses: 3
    Dernier message: 08/08/2003, 16h51
  4. Réponses: 2
    Dernier message: 16/07/2003, 14h40
  5. Problème dans requête avec count()
    Par BadFox dans le forum Requêtes
    Réponses: 3
    Dernier message: 08/07/2003, 18h02

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