Bon je pense avoir trouvé :
Alors je récapitule la chose...
Mon problème consistait à mettre en place un petit moteur de recherche. Pour cela, une simple requête SQL à la fois :
-
non sensible à la casse (BaLLon = ballOn = ballon = BALLON ...etc.)
- pas trop longue ...
1er ÉTAPE :
Après la validation de mon champ de recherche :
- Je récupère la chaine contenant les mots a rechercher séparés par une virgule (1).
- Je la sépare (par rapport au virgules) mot par mot dans un tableau (2).
- Je compte le nombre de mots dans mon tableau (3).
- J'initialise un petit compteur (4).
- On passe tous les mots de la recherche en minuscules (5).
- Je boucle afin d'obtenir une chaine comprenant tous mes mots séparés par un | [AltGr+6] (5)
- Je retire le premier caractère de la chaine (c'est a dire | ) (6)
Donc, au final,
$suite contient
mot1|mot2|mot3...etc
<?php
$tableaumot = explode(",",$_POST['mot']); (1 et 2)
$nbrmot = count($tableaumot); (3)
$k=0; (4)
while($k < $nbrmot){
$mot=$tableaumot[$k];
if(substr($mot,0,1) == " "){ $mot = substr($mot,1); }
$mot = strtolower($mot); (5)
$suite = $suite."|".$mot; (6)
$k++;
}
$suite = substr($suite,1); (7)
?>
2eme ÉTAPE :
Construction de la requête.
- Les choses habituelles... (1)
- On concatène le reste de notre requête (2)
A savoir que :
- LOWER permet d'extraire le champ de la base de données, de le convertir en minuscules avant de le comparer.
- Le fait d'avoir nos mots sous la forme
mot1|mot2|mot3 permet de faciliter la requête car on compare mot1 avec le champ précédemment passé en minuscules puis le mot2, le mot3...etc avant de passer au champ suivant.
- On
ouvre la connexion à la base de données, on exécute notre requête (on récupère ce que l'on veut)
et on ferme la connexion à la base de données... (3)
<?php
$requete="SELECT * FROM ma_table WHERE"; (1)
$requete.="LOWER(`champ_1`) REGEXP '".$suite."' OR LOWER(`champ_2`) REGEXP '".$suite."' OR ...etc. (2)
...(3)
?>
Voilà, mon problème est
résolu... En espérant qu'il puisse aider d'autres codeurs plus tard :)
X9 (with
CaPiT Help)