moteur de recherche dans petite annonce

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : moteur de recherche dans petite annonce

par dogmongo » 18 sept. 2008, 16:34

merci pour l'explication Truc :wink:

par Truc » 18 sept. 2008, 11:15

Voir les priorités des opérateurs

la requete vérifiait que :

Code : Tout sélectionner

Titre ~ 'indemnes' OU LOWER(Titre) ~ 'indemnes' OU Texte ~ 'indemnes' OU LOWER(Texte) ~ 'indemnes' ET Valide="1"
seul la dernière ligne est affectée par la valeur du champ "Valide"... donc du moment que le mot recherché apparaissait dans un des champs la ligne est retournée.

par dogmongo » 18 sept. 2008, 10:40

si si super guilt92 :wink:
merci mille fois

par guilt92 » 18 sept. 2008, 10:36

en gros si je mets un critère de recherche par mot clé , il ne prend plus en compte mes options choisis dans les selectboxs
Même avec les parenthèses ?

par dogmongo » 18 sept. 2008, 10:31

après l'intervention de Berzemus j'ai vu que j'avais un WHERE de trop, depuis la requete fonctionne mais ne me donne pas le résultat voulu.

en gros si je mets un critère de recherche par mot clé , il ne prend plus en compte mes options choisis dans les selectboxs


incroyable guilt92 je réédite ce message pour t'annoncer que tes parenthèses ont été efficaces, je n'y aurais pas pensé puisque je ne le savais pas.
merci beaucoup tu m'enlèves une épine du pied :wink:

par guilt92 » 18 sept. 2008, 10:26

Bonjour,

Cela ne manque pas de parenthèse ? En effet j'imagine que tu veux quelque chose comme :
  $requete = "SELECT * FROM source_annonce WHERE  
    (Titre LIKE '%".$search."%' OR  
    LOWER(Titre) LIKE '%".$search."%' OR 
    Texte LIKE '%".$search."%' OR  
    LOWER(Texte) LIKE '%".$search."%')  
    && Valide=\"1\" $ra $rub  
    ORDER BY Titre ASC"; 
Car sinon tout se joue sur la dernière condition... Quand tu dis que ca marche pas ca veut dire que la requete ne s execute pas ou que tu n obtiens pas ce que tu veux comme résultats ?

EDIT : Berzemus est trop rapide pour moi :D

par Berzemus » 18 sept. 2008, 10:24

et avec des parenthèses ?

Code : Tout sélectionner

SELECT * FROM source_annonce WHERE ( Titre LIKE '%indemnes%' OR LOWER(Titre) LIKE '%indemnes%' OR Texte LIKE '%indemnes%' OR LOWER(Texte) LIKE '%indemnes%' ) AND Valide="1" AND ann_Race = "Berger Australien Shepherd" ORDER BY Titre ASC

par dogmongo » 18 sept. 2008, 10:10

:oops: :oops:
SELECT * FROM source_annonce WHERE Titre LIKE '%indemnes%'
OR LOWER(Titre) LIKE '%indemnes%'
OR Texte LIKE '%indemnes%'
OR LOWER(Texte) LIKE '%indemnes%'
&& Valide="1"
ORDER BY Titre ASC
fausse alerte
SELECT * FROM source_annonce WHERE Titre LIKE '%indemnes%' OR LOWER(Titre) LIKE '%indemnes%' OR Texte LIKE '%indemnes%' OR LOWER(Texte) LIKE '%indemnes%' && Valide="1" && ann_Race = "Berger Australien Shepherd" ORDER BY Titre ASC
je ne vois rien de génant dans cette requete :?:

par Truc » 18 sept. 2008, 09:58

Sujet qui peut éventuellement t'aider (surtout point 2) :)

par dogmongo » 18 sept. 2008, 09:51

c'est du type text
mais j'ai optimisé mes recherches dans la base de donnée en type FULLTEXT sur ma variable search en relation avec le champ Titre et Texte.

je viens aussi de voir que j'ai aussi un where en trop mais j'ai toujours besoins d'aide ca ne marche toujours pas.

nouveau code
$page = isset($_GET['page']) ? $_GET['page'] : '';

if($_POST['search']){
$search = htmlentities($_POST['search'],ENT_QUOTES); 
}
if($_GET['search']){
$search = htmlentities($_GET['search'],ENT_QUOTES); 
}

// moteur critère
	if ($s_race){
	 $ra  = "&& ann_Race = \"$s_race\" ";
	}else if($s_race == "0"){
	$ra  = "";
	}else{
	$ra  = "";
	}
	 
	if ($s_rub){
	$rub  = "&& ann_rubrique = \"$s_rub\" ";
	}else if($s_rub == "0"){
	$rub  = "";
	}else{
	$rub  = "";
	}
	 
// Prepare le requete MySql 
if($search){
// si recherche
	$requete = "SELECT * FROM source_annonce WHERE 
	Titre LIKE '%".$search."%' OR 
	LOWER(Titre) LIKE '%".$search."%' OR
	Texte LIKE '%".$search."%' OR 
	LOWER(Texte) LIKE '%".$search."%' 
	&& Valide=\"1\" $ra $rub 
	ORDER BY Titre ASC"; 
	
}else{

unset($search);
// si pas recherche
$requete = "SELECT * FROM source_annonce WHERE Valide=\"1\" $ra $rub ORDER BY Titre ASC ";

}

$query= mysql_query($requete); 

par Berzemus » 18 sept. 2008, 09:42

Texte LIKE '%".$search."%' OR
Le champs Texte est de quel type ? Parce que bon, rechercher avec un 'like' dans un champ texte, c'est tout sauf optimal.. mieux vaut t'orienter vers la recherche fulltext.

Et ça t'éviteras cette double recherche, qui ne fait que ralentir encore plus ta requête.

moteur de recherche dans petite annonce

par dogmongo » 18 sept. 2008, 09:36

bonjour,

je suis en train de développer un petit moteur de recherche qui me cause des problèmes, la recherche peut se faire de trois façons, par mots-clés ou en sélectionnant deux options différentes proposées dans des sélectbox.

si je ne tape pas de mots clés ma requête fonctionne correctement en respectant les options choisies dans les sélectbox.

mais si je choisis une option dans les sélectbox couplés à un mots-clés ça ne marche plus ma requête ne me retourne rien.
// critères de recherche
	if ($s_race){
	 $ra  = "&& ann_Race = \"$s_race\" ";
	}else if($s_race == "0"){
	$ra  = "";
	}else{
	$ra  = "";
	}
	 
	if ($s_rub){
	$rub  = "&& ann_rubrique = \"$s_rub\" ";
	}else if($s_rub == "0"){
	$rub  = "";
	}else{
	$rub  = "";
	}
	 
// Prepare la requete MySql 

if($search){// si recherche (  cette requête ne fonctionne pas )

	$requete = "SELECT * FROM source_annonce WHERE 
	Titre LIKE '%".$search."%' OR 
	LOWER(Titre) LIKE '%".$search."%' OR
	Texte LIKE '%".$search."%' OR 
	LOWER(Texte) LIKE '%".$search."%' OR 
	WHERE Valide=\"1\" ".$ra." ".$rub."  
	ORDER BY Titre ASC"; 
	
}else{

unset($search);

// si pas recherche (  cette requête marche à merveille )
$requete = "SELECT * FROM source_annonce WHERE Valide=\"1\" $ra $rub ORDER BY Titre ASC ";

}

$query = mysql_query($requete); 

merci d'avance je suis en plan :?