Besoin d'aide pour une requête sql

OTP

WRInaute accro
Bonjour,

Dans un script, je veux chercher dans une base les enregistrements dont un champ précis contient un ou des mot(s) clé(s) particulier(s).

Dans mon script, le mot clé est un titre d'article, par exemple "Le ciel est bleu" et je veux trouver les articles de titres proches.

Si je fait un LIKE titre_a_chercher, je n'ai en sortie que les articles dont le titre est (ou contient, selon les règles) les mots "Le ciel est bleu".

Or, j'aimerais aussi récupérer ceux qui contiennent "ciel" ou bien "bleu" (et idéalement pas ceux qui n'ont que "Le" ou "est".

Il y a t'il un moyen de s'en sortir aisément ?

Merci d'avance,

Michaël (qui poursuit sa découverte de sql...)
 

rog

WRInaute passionné
j'avais vu trainer sur le forum un filtre de pertinence mais je ne me souviens plus de l'instruction

rog
 

nickargall

WRInaute accro
Avec la fonction Explode utilisant l'espace comme délimiteur, tu .. exploses ta chaîne dans un tableau $tab.

Ensuite tu fais une boucle sur les mots de ce tableau, et pour chacun tu ajoutes à ta requête une clause.
Code:
$select="SELECT * FROM `table` WHERE `champ` LIKE '%".$tab[0]."%'";
[debut de boucle]
$select.=" OR `champ` LIKE '%".$tab[1]."%'";
$select.=" OR `champ` LIKE '%".$tab[2]."%'";
etc ...
[fin de boucle]

mais c'est vraiment le niveau 0.1 de la pertinence.
 

OTP

WRInaute accro
Pas réussi à mettre en place le MATCH AGAINST.
Je me suis rabattu sur le OR avec une sélection de mot du texte à chercher. Ca marche suffisamment bien.
 

jeroen

WRInaute passionné
Onthisplanet a dit:
Pas réussi à mettre en place le MATCH AGAINST.
Je me suis rabattu sur le OR avec une sélection de mot du texte à chercher. Ca marche suffisamment bien.

as tu déclaré tes champs de la base en "full text" ?
 

Malaiac

WRInaute occasionnel
nickargall a dit:
Avec la fonction Explode utilisant l'espace comme délimiteur, tu .. exploses ta chaîne dans un tableau $tab.
Ensuite tu fais une boucle sur les mots de ce tableau, et pour chacun tu ajoutes à ta requête une clause.
Code:
$select="SELECT * FROM `table` WHERE `champ` LIKE '%".$tab[0]."%'";
[debut de boucle]
$select.=" OR `champ` LIKE '%".$tab[1]."%'";
$select.=" OR `champ` LIKE '%".$tab[2]."%'";
etc ...
[fin de boucle]

mais c'est vraiment le niveau 0.1 de la pertinence.

C'est surtout le niveau ou tu exploses ta base...
si une phrase fait 30 .... ou 200 mots, et que ta base a quelques dizaines de milliers de lignes, on part sur des boucles de plusieurs minutes (200 requetes LIKE %...% , en full scan, bonjour l'angoisse

La solution FULL TEXT est éminement préférable pour ce genre de problématiques.
 

OTP

WRInaute accro
jeroen a dit:
Onthisplanet a dit:
Pas réussi à mettre en place le MATCH AGAINST.
Je me suis rabattu sur le OR avec une sélection de mot du texte à chercher. Ca marche suffisamment bien.

as tu déclaré tes champs de la base en "full text" ?

En "text".
En comme le script de base n'est pas de moi, je ne sais pas trop si je peux y changer quelque chose...
 

OTP

WRInaute accro
jeroen a dit:
A priori pas de problème. J'étais aussi en "text" avant

Sans doute un souci d'interface chaise -clavier.
J'ai mis en route une solution qui, même imparfaite, fera l'affaire jusqu'à la prochaine version du site...
 

NextGeneration

WRInaute occasionnel
Onthisplanet a dit:
jeroen a dit:
A priori pas de problème. J'étais aussi en "text" avant

Sans doute un souci d'interface chaise -clavier.
J'ai mis en route une solution qui, même imparfaite, fera l'affaire jusqu'à la prochaine version du site...

File moi tes sources par MP
redface.gif


On va upgrader l'interface C-C :p
 

OTP

WRInaute accro
NextGeneration a dit:
File moi tes sources par MP
redface.gif


On va upgrader l'interface C-C :p

Tu ne manques pas d'ambition ! :wink:
Quelles sources ? Le install.php, j'imagine, pour voir comment sont construites les tables ?
 

Discussions similaires

Haut