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 :

[SQL] problème requete multicritère


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    293
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 293
    Par défaut [SQL] problème requete multicritère
    bonjour, je voudrais créer une requete multicritère pour un site, donc j'ai plusieurs champs dans un formulaire:

    3 boites déroulantes et 2 cases à cocher

    voici le lien ou vous pouvez voir ce formulaire

    http://www.clef-immo.be/accueil.php

    je ne sais pas comment m'y prendre pour créer cette requête, je ne vous demande pas de faire la requete à ma place mais un lien ou un tuto parlant de cela.

    il faut savoir que les list box peuvent avoir "sans importance".

    merci pour votre aide

  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
    Tu commences une requête en mettant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT champs FROM table WHERE 1
    Ensuite tu testes les champs à ajouter (tu regardes si tes combos sont différentes de "Sans importance"), si il faut ajouter une condition tu ajoutes simplement à la requête pour chacune d'entre elles

    Et après tu exécutes ta requête et le tour est joué

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    293
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 293
    Par défaut
    oulala

    bon je suis débutant en php alors je ne comprends pas très bien

    SELECT champs FROM table WHERE 1
    là je dois mettre quel champ (tous ou un spécifique) ?
    pourquoi WHERE 1 ?

    que dois je mettre à la place de 1

    AND champ = valeur
    là c'est le champ qu'on ajoute et à quoi correspond valeur

    désolé mais je comprends pas grand chose, peux tu me donner un petit bout de code + complet

    merci

  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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT champs FROM table WHERE 1
    Alors,
    champs c'est la liste des champs que tu veux récupérer de ta table.
    table c'est le nom de ta table
    WHERE 1 c'est juste une astuce pour simplifier grandement la construction de la requête, pas besoin de toucher

    Et ça c'est juste les conditions de ta requête
    champ c'est le nom du champ de ta table à tester
    valeur c'est la valeur du champ, c'est à dire ce qui est sélectionné dans ta liste déroulante

    Au final à titre s'exemple bidon ça donne quelque chose dans ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT nom FROM villes WHERE 1 AND code_postal = '72100' AND departement = 'Sarthe'

    Edit : Tu as déjà eu des explications ici :
    http://www.developpez.net/forums/sho...d.php?t=170928

    Et ça pourrait aussi être pas mal d'avoir de tes nouvelles sur les topics que tu créés parce que on sait jamais ce que ça donne au final et si tu t'en sors...

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    293
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 293
    Par défaut
    bon suite de mon message

    donc j'ai commencé par mettre cela comme code

    dans ma requete

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
     
     $sql = 'SELECT * FROM biens WHERE type=\"".$_POST['select_type']."\""; LIMIT '.$_GET['debut'].','.$nb_affichage_par_page;
    je n'ai pas encore ajouté les qutres champs

    mais là j'ai déjà une erreur

    Parse error: syntax error, unexpected T_STRING in /home.10.2/clefimmo/www/recherche_biens.php on line 205

    encore merci

  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
    A essayer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT * FROM biens WHERE type='" . $_POST['select_type'] . "' LIMIT " . $_GET['debut'] . ", " . $nb_affichage_par_page;

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    293
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 293
    Par défaut
    voilà j'ai changé comme tu m'as dit mes mes enregistrements correspondant ne s'affiche pas

    voici mon code complet

    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
     
    <?php
    include( "config_server.php" );
    // on prépare une requête permettant de calculer le nombre total d'éléments qu'il faudra afficher sur nos différentes pages
    $sql="SELECT count(*) FROM biens WHERE type='APPARTEMENT' AND statut='A VENDRE'";
    // on exécute cette requête
    $resultat = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
    // on récupère le nombre d'éléments à afficher
    $nb_total = mysql_fetch_array($resultat);
    // on teste si ce nombre de vaut pas 0
    if (($nb_total = $nb_total[0]) == 0) {
        echo 'Aucune réponse trouvée';
    }
    else {
     
     
        // sinon, on regarde si la variable $debut (le x de notre LIMIT) n'a pas déjà été déclarée, et dans ce cas, on l'initialise à 0
        if (!isset($_GET['debut'])) $_GET['debut'] = 0;
     
        $nb_affichage_par_page = 3;
     
        // Préparation de la requête avec le LIMIT
       $sql = "SELECT * FROM biens WHERE type='" . $_POST['select_type'] . "' LIMIT " . $_GET['debut'] . ", " . $nb_affichage_par_page;
     
        // on exécute la requête
        $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
     
        // on va scanner tous les tuples un par un 
     
     
         ?>
     
        <table width="473"  class="tableau-affichage">
        <?php
        while ($data = mysql_fetch_array($req)) {
    	?>
    	<tr>
        <td><!-- td1 -->
    	<table width="466" bgcolor="#E3F9D2" style="border:1px solid #8E8A8A; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:12px; font-weight:bold; ">
     
        <tr>
        <td>Situation : <?php echo $data[situation]; ?></td>
        <td align="center">Prix : <?php echo $data[prix]; ?> euros</td>
        </tr>
        </table>
        </td><!-- fin td1 -->
        </tr>
        <tr>
        <td><!-- td2 -->
    	<table width="466" bgcolor="#FFFFCC" style="border:1px solid #8E8A8A;">
        <tr>
         <td><a href="details_biens.php?id=<?php echo $data[id] ?>"><?php echo '<img src="'.$data['photo1'].'" width="132" height="100" style="border:1px solid #000000; " />' ?></a></td>
        <td><?php echo $data[composition]; ?></td>
        </tr>
        </table>
     
    	</td><!-- fin td2 -->
        </tr>
      <?php
        }
        ?>
    	</table>
     
    	<?php
        // on libère l'espace mémoire alloué pour cette requête 
        mysql_free_result ($req); 
        echo '</table><br />';
     
        // on affiche enfin notre barre
    	?>
    	<table width="200" border="1" class="navigation">
        <tr>
        <td><?php echo '<span class="gras">'.barre_navigation($nb_total, $nb_affichage_par_page, $_GET['debut'], 3).'</span>'; ?></td>
         </tr>
        </table>
        <?php 
     
    }
    // on libère l'espace mémoire alloué pour cette requête 
    mysql_free_result ($resultat); 
    // on ferme la connexion à la base de données. 
    mysql_close (); 
    ?>
    merci

  8. #8
    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
    Bon je commence par le début.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $nb_total = mysql_fetch_array($resultat);
    // on teste si ce nombre de vaut pas 0
    if (($nb_total = $nb_total[0]) == 0) {
        echo 'Aucune réponse trouvée';
    }
    Peux-tu expliquer ce que tu veux faire parce que là j'ai l'impression que tu t'égares.
    $nb_total ne contient pas le nombre d'enregistrements répondant à la requête (si c'est ce que tu veux), mais un tableau associatif de ces enregistrements.
    Et tu réaffectes $nb_total dans la condition de ton if, donc je vois pas l'intérêt...

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    293
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 293
    Par défaut
    c'est le code pour faire un affichage page par page de mes enregistrements

  10. #10
    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 ph_anrys
    c'est le code pour faire un affichage page par page de mes enregistrements
    Et par rapport à ce que je ai écrit tu peux éclaircir stp ?

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    293
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 293
    Par défaut
    je vais être honête , c'est un script que j'ai trouvé sur le net mais je nc comprends pas bien son code. si ce code est à changer, peux tu m'aider

    merci

  12. #12
    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 ph_anrys
    je vais être honête , c'est un script que j'ai trouvé sur le net mais je nc comprends pas bien son code. si ce code est à changer, peux tu m'aider

    merci
    Je m'en doutais, de toute façon à ce que je comprends ce bout de code ne pose pas problème (même si il est vraiment plus qu'étrange, tu l'as vraiment bien testé ?!?), pour la requête quand tu définis $sql place à la ligne juste en dessous un echo $sql; pour voir la requête qui est réellement exécutée.

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    293
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 293
    Par défaut
    voilà j'ai enlevé l'affichage page par page pour un essai

    donc j'ai le code

    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
     
    <?php
    include( "config_server.php" );
    $sql = "SELECT * FROM biens WHERE type='" . $_POST['select_type'] . "'"; 
    $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
    ?>
     
        <table width="473"  class="tableau-affichage">
        <?php
        while ($data = mysql_fetch_array($req)) {
    	?>
    	<tr>
        <td><!-- td1 -->
    	<table width="466" bgcolor="#E3F9D2" style="border:1px solid #8E8A8A; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:12px; font-weight:bold; ">
     
        <tr>
        <td>Situation : <?php echo $data[situation]; ?></td>
        <td align="center">Prix : <?php echo $data[prix]; ?> euros</td>
        </tr>
        </table>
        </td><!-- fin td1 -->
        </tr>
        <tr>
        <td><!-- td2 -->
    	<table width="466" bgcolor="#FFFFCC" style="border:1px solid #8E8A8A;">
        <tr>
         <td><a href="details_biens.php?id=<?php echo $data[id] ?>"><?php echo '<img src="'.$data['photo1'].'" width="132" height="100" style="border:1px solid #000000; " />' ?></a></td>
        <td><?php echo $data[composition]; ?></td>
        </tr>
        </table>
     
    	</td><!-- fin td2 -->
        </tr>
    <?php
        }
        ?>
    	</table>
    je n'ai toujours aucun enregistrement correspondant qui s'affiche

    je te donne aussi le code du formulaire

    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
     
    <form name="formulaire_recherche" action="recherche_biens.php" method="post">
    <table width="200" border="0" class="tableau_recherche">
      <tr>
        <td>Type de bien </td>
      </tr>
      <tr>
        <td><select name="select_type">
    	<option>Sans importance</option>
    	<option>APPARTEMENTS</option>
    	<option>Maisons entre pignons</option>
    	<option>Maisons individuelles</option>
    	<option>Garages</option>
    	<option>Bureaux</option>
    	<option>Entrepôts</option>
    	<option>Surfaces commerciales</option>
    	<option>Terrains</option>
    	</select></td>
      </tr>
      <tr>
        <td>Prix</td>
      </tr>
      <tr>
        <td><select name="select_prix">
    	<option>Sans importance</option>
    	<option>- 100.000 €</option>
    	<option>100.000 - 150.000 €</option>
    	<option>150.000 - 200.000 €</option>
    	<option>+ 200.000 €</option>
    	</select></td>
      </tr>
      <tr>
        <td>Commune</td>
      </tr>
      <tr>
        <td><?php print $ld; ?></td>
      </tr>
      <tr>
        <td>&nbsp;</td>
      </tr>
      <tr>
        <td><input name="radio_etat" type="radio" value="à louer">A vendre<input name="radio_etat" type="radio" value="à vendre">A louer</td>
      </tr>
      <tr>
        <td>&nbsp;</td>
      </tr>
      <tr>
        <td><input name="bouton_valider" type="submit" value="Valider la recherche"></td>
      </tr>
    </table>
    </form>
    je comprends pas l'erreur même sans l'affichage page par page

    merci

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    293
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 293
    Par défaut
    l'écho me donne cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    $sql = "SELECT * FROM biens WHERE type='" . $_POST['select_type'] . "'";
    donc là il me donne bien l'option sélectionné mais n'affiche pas les enregistrements correspondants.

  15. #15
    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
    Pour le echo fais ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql = "SELECT * FROM biens WHERE type='" . $_POST['select_type'] . "'"; 
    echo $sql;
    $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
    Et dis moi le résultat de l'affichage.

  16. #16
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    293
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 293
    Par défaut
    SELECT * FROM biens WHERE type='Maisons entre pignons'

    voici le résultat

  17. #17
    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 ph_anrys
    SELECT * FROM biens WHERE type='Maisons entre pignons'

    voici le résultat
    Et en testant cette requête en la copi-collant dans phpmyadmin tu as bien des résultats en retour ?


    Edit : je viens de voir un truc, pour récupérer les valeurs il faut faire $data['situation'] par exemple et pas $data[situation] (ajouter les quotes)

  18. #18
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    293
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 293
    Par défaut
    imbécile que je suis , forcémént ca ne peut pas marcher

    dans ma list box, j'ai 'appartements' écrit comme ceci

    et dans le champ type de ma table 'appartement' est sans S donc forcément il trouve pas d'enregistrements correspondants à ma list box

    désolé de t'avoir dérangé pour une bétise pareille

    encore merci, je vais mettre résolu

    bon maintenant je vais faire ma requête multicritères et afficher les enregistrements page par page

  19. #19
    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, tiens moi au courant sur ce topic si tu veux et si tu as encore besoin d'un coup de main.

  20. #20
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    293
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 293
    Par défaut
    bon j'ai un autre problème aussi qui à mon avis des très costaud

    donc comme tu peux voir dans le lien suivant

    http://www.clef-immo.be/accueil.php

    pour ma recherche il ya type, prix, localité...

    maintenant pour le prix

    j'ai -100000 euros
    100000 et 150000 (entre)...

    donc ceci est du texte

    mon champ prix est de type int

    ma question est comment faire la requete de tous les biens qui sont par ex à - de 100000 euros,

    j'espère que je me suis bien fait comprendre

    encore merci

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [SQL]Problème requete sql sous access avec vba
    Par aaliyan dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 13/04/2007, 18h53
  2. [SQL] Problème requete sql
    Par dionysos73 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 25/10/2006, 18h11
  3. Problème requete SQL
    Par tonyskn dans le forum Langage SQL
    Réponses: 3
    Dernier message: 14/11/2004, 20h37
  4. problème requete sql
    Par Fred- dans le forum ASP
    Réponses: 2
    Dernier message: 13/06/2004, 02h20
  5. Problème Requete SQL et QuickReport
    Par arnaud_verlaine dans le forum C++Builder
    Réponses: 7
    Dernier message: 07/01/2004, 09h31

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