Page 1 sur 1

Probleme recuperation sql multicriteres dans module de reche

Posté : 05 juin 2008, 23:41
par cuisto44000
Bonjour à tous, j'ai une table dans ma base de donnée pour mon site d'annonces de dons d'objets http://publicannonces.com qui contient notemment les champs "titre" et "intitule" ; titre contient donc le titre de l'annonces, et intitule contient soit "donne" soit "demande" ces données ne peuvent se nommer que par ces deux mots car ils sont choisis au prealable dans une liste deroulante ...

Ma requete qui doit afficher uniquement les dons :

Code : Tout sélectionner

mysql_query("SELECT * FROM don WHERE intitule='donne' AND titre LIKE '$rens%' OR titre LIKE '%$rens' OR titre LIKE '%$rens%'");
Et celle qui n'est censée afficher que les emandes :

Code : Tout sélectionner

mysql_query("SELECT * FROM don WHERE intitule='demande' AND titre LIKE '$rens%' OR titre LIKE '%$rens' OR titre LIKE '%$rens%'");
je vous precise que $rens=$_POST['renseignements']; mais cela n'a pas d'importance dans mon probleme je pense.

Mon probleme c'est que les deux requetes affichent tous les resultats, quand je recherche dans les intitule='donne' sa me met aussi les resultats des intitule='demande' et vis-versa O_o donc j'avoue ne pas comprendre la, si quelqu'un peut m'aider sa serait sympa ;)

Merci par avance ;)

ps : pour tester : http://publicannonces.com/recherche.php

Posté : 06 juin 2008, 08:06
par d0m
salut,

à mon avis cela vient de la priorité des AND et OR dans ta requete : les AND ont priorités sur les OR
Ta requête est lu comme ceci :

selectionner les lignes de don
qui ont :
soit intitule='donne' et titre like '$rens%'
soit titre LIKE '%$rens'
soit titre LIKE '%$rens%'


il faut parentheser correctement la clause where.

Re: Probleme recuperation sql multicriteres dans module de r

Posté : 06 juin 2008, 08:08
par albat
3 choses :
- les 3 conditions sur le champ titre sont redondantes. En fait, la 3e englobe les deux premières. Donc, tu peux les retirer.
- Le SELECT * est à proscrire. Indique clairement les champs que tu veux récupérer.
- N'oublie pas d'extraire les variables de la chaîne de caractères.

Est-ce que cela fonctionne mieux avec ceci ?
$req_don = "SELECT *
            FROM   don
            WHERE  intitule='donne'
              AND  titre LIKE '%".$rens."%'";

$req_dem = "SELECT *
            FROM   don
            WHERE  intitule='demande'
              AND  titre LIKE '%".$rens."%'";

Posté : 06 juin 2008, 08:24
par zeus
Modération :
Afin d'obtenir plus de réponses, le sujet est déplacé dans le forum "SQL & Bases de données".

Posté : 06 juin 2008, 08:29
par albat
Modération :
Afin d'obtenir plus de réponses, le sujet est déplacé dans le forum "SQL & Bases de données".
L'y était pas déjà ??? :oops:

Re: Probleme recuperation sql multicriteres dans module de r

Posté : 06 juin 2008, 09:09
par cuisto44000
3 choses :
- les 3 conditions sur le champ titre sont redondantes. En fait, la 3e englobe les deux premières. Donc, tu peux les retirer.
- Le SELECT * est à proscrire. Indique clairement les champs que tu veux récupérer.
- N'oublie pas d'extraire les variables de la chaîne de caractères.

Est-ce que cela fonctionne mieux avec ceci ?
$req_don = "SELECT *
            FROM   don
            WHERE  intitule='donne'
              AND  titre LIKE '%".$rens."%'";

$req_dem = "SELECT *
            FROM   don
            WHERE  intitule='demande'
              AND  titre LIKE '%".$rens."%'";
J'avais deja essayé, mais cela ne marchait pas, par contre j'ai trouvé la solution, il suffisait de regrouper les titre like "..."... par ( et ) hihi tout simple :

Code : Tout sélectionner

SELECT * FROM don WHERE intitule='donne' AND ( titre LIKE '$rens%' OR titre LIKE '%$rens' OR titre LIKE '%$rens%' ) et SELECT * FROM don WHERE intitule='demande' AND ( titre LIKE '$rens%' OR titre LIKE '%$rens' OR titre LIKE '%$rens%' )
Voilou, et sa marche tres bien ;) http://publicannonces.com/recherche.php pour tester

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Posté : 06 juin 2008, 09:35
par zeus
Modération :
Afin d'obtenir plus de réponses, le sujet est déplacé dans le forum "SQL & Bases de données".
L'y était pas déjà ??? :oops:
Nan, il était dans "Autres" ;)
En plus, il était signalé :lol: