bonjour à vous,
j essai de mettre en place une barre de recherche mais j ai quelque difficulté pour la conception
j ai reussi a la faire fonctionné mais seulement si y a un seul mot en faisant ceci
ensuite en parcourant le net j ai trouvé une chose qui marche sur plusieur mots mais je n arrive pas a mettre en place car la ca fonctionne que sur un seul champ de ma table (exemple seulement la Marque) en faisant ceci
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 if (isset($_POST['action'])) $_SESSION['critere'] = $_POST; if(isset($_SESSION['critere'])) extract($_SESSION['critere']);// extraction des critères de recherche $choix = array(); if(isset($Keyword) && !empty($Keyword)) {$choix[] = "Marque LIKE '%$Keyword%'";} {$choix[] = "Modele LIKE '%$Keyword%'";} {$choix[] = "Gamme LIKE '%$Keyword%'";} $critere = implode(' OR ', $choix); $requete = "select * ,(Marque) AS Marque from batterie WHERE $critere ORDER BY Marque ASC"; $reponse = mysql_query( $requete ) ;
je ne sais pas comment combiner les 2 vu que je souhaite une recherche sur la table qui se presente sous cette forme
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 if (isset($_POST['action'])) $_SESSION['critere'] = $_POST; if(isset($_SESSION['critere'])) extract($_SESSION['critere']);// extraction des critères de recherche $choix = array(); if(isset($Keyword) && !empty($Keyword)) {$choix[] = "Marque";} // j ai supprimé les autres champs car sinon ma requete donne une erreur sql $critere = implode(' ', $choix); $mots = explode( " ", $Keyword ); if( count( $mots ) > 0 ) $requete = "select * ,('Marque') AS Marque from batterie WHERE"; for( $i = 0; $i < count( $mots ); $i++ ) { //$requete .= "$critere "; $requete .= " $critere LIKE '%". $mots[$i] ."%' "; if( $i < count( $mots ) - 1 ) $requete .= " OR ";} $requete .= " ORDER BY Marque"; $reponse = mysql_query( $requete ) ;
ID
Marque
Modele
Gamme
etc.. j ai 35 colonnes dont je souhaite rechercher
j ai essayé avec un fulltext
mais j ai eu cette erreur #1191 - Can't find FULLTEXT index matching the column list
Code : Sélectionner tout - Visualiser dans une fenêtre à part select * from batterie WHERE MATCH(Marque,Modele,Gamme) AGAINST('exide') ORDER BY Marque
cela a fonctionné a moitié quand j ai reussi a mettre mes champs Marque,Modele,Gamme en fulltext direct dans ma table car ensuite j ai fais cela
du coup il recherche pas non plus le 2 eme mots
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 $requete = "select * ,('Marque') AS Marque from batterie WHERE "; for( $i = 0; $i < count( $mots ); $i++ ) { //$requete .= "$critere "; $requete .= " MATCH($critere) AGAINST('$mots[$i]') "; if( $i < count( $mots ) - 1 ) $requete .= " OR ";} $requete .= " ORDER BY Marque";
j ai essayé une chose aussi comme ceci
mais erreur sql et en parcourant le net j ai cru comprendre que l on peut pas mettre un IN avec un LIKE
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 $requete = "select * ,('Marque') AS Marque from batterie WHERE ID IN($critere)"; for( $i = 0; $i < count( $mots ); $i++ ) { //$requete .= "$critere"; $requete .= " LIKE '%". $mots[$i] ."%' "; if( $i < count( $mots ) - 1 ) $requete .= " OR "; } $requete .= " ORDER BY Marque";
voila , je ne sais pas comment procéder et pardonnez moi pour mes lacunes .
je vous remercie d avance pour l aide apporté
Partager