Bonjour!
Je suis en train de finaliser un petit site web perso à destination des étudiants en économie qui à pour but de fournir une base de donnée fiable des principales théories et auteurs de la disciple (au moins jusqu'au niveau L2/L3).
La page d'accueil comporte une barre de recherche qui permet à l'utilisateur de directement rechercher ce qu'il souhaite sur le site. Les informations qu'on peut récupérer sont de plusieurs types. On peut ainsi pour un mot clef rechercher: -un auteur -des théories -un thème (exemple: monnaie) et afficher la liste des auteurs ou théories qui correspondent à ce thème
Une théorie en base de donnée comporte plusieurs champs: auteurs, contenu, thèmes et tags. Quand l'internaute entre un mot clef et recherche des théories, je ne sais pas il recherche par exemple toutes les théories d'un auteur car il s’intéresse à cet auteur, ou toutes les théories qui ont pour thème la monnaie. Je dois donc vérifier sur le mot clé entrée match avec le champ auteur OU le champ contenu OU le champ théme OU le champ tags d'une théorie. Si oui, on considère que la théorie correspond à la recherche de l'utilisateur.
Voici la requête associée (avec Active Record de codeIgniter) qui fonctionne bien:
1 2 3 4 5 6 7 8 9 10 11 12 13 | public function get_theories($search) { $resultat = $this->db->select('*') ->from('theories') ->like('nomTheorie',$search) ->or_like('auteurs',$search) ->or_like('themes',$search) ->or_like('tags',$search) ->get() ->result(); return $resultat; } |
Le soucis arrive quand l'utilisateur entre plusieurs mots clef. Par exemple il recherche la théorie appelée "théorie du revenu permanent", énoncée par Milton Friedman. Il tape donc "revenu permanent Friedman" dans le champ de recherche. Or ni le nom de la théorie ni le nom de l'auteur ne contient la chaine "revenu permanent Friedman", donc la théorie n'est pas trouvée avec ma requête. Elle n'est trouvé que si l'internaute cherche "Friedman" ou "revenu permanent".
j'ai cherché dans la documentation et je n'ai pas trouvé mon bonheur… A priori on ne peut pas passer à LIKE de tableau du type:
1 | like('champ',explode(' ',$search))
|
Ce qui répondrait parfaitement! La fonction WHERE_IN correspond à ce que je veux faire…mais avec un Where Manifestement il n'existe pas de LIKE_IN… Pourtant c'est exactement ce que je cherche! Il me faudrait en fait un LIKE inversé: le contenu du champ indiqué est contenu dans le masque, et non l'inverse..^^ Je ne peux pas utiliser de OR_LIKE car je ne sais à l'avance le nombre de termes que la recherche de l’utilisateur comprends…
Merci d'avance pour votre aide, et désolé si ma demande peut sembler simple ou stupide^^ J'ai essaye de mieux lire la documentation que la dernière fois