[HS] syntaxe SQL et/ou php

Le
h.wismes
Bonjour,

Dans le cadre d'une recherche d'informations dans
une base de données, par mots clé, je n'arrive pas
à concrétiser ce type de recherche :

Le mieux est de donner un exemple.

mot clé (motcle) = "biographie richard stallman"

$query_string = "SELECT * FROM table WHERE infos LIKE '%$motcle%' ";

Or, le nom "stallman" existe bien dans la base mais
"biographie richard stallman" n'est pas contenu dans "stallman".

Comment faire alors le contraire, c'est à dire faire la recherche
selon "stallman' contenu dans "biographie richard stallman" ?

Quel serait la syntaxe SQL ou php en ce sens ?

Merci.

Henri

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-french-REQUEST@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listmaster@lists.debian.org
Archive: http://lists.debian.org/201111041120.26387.h.wismes@free.fr
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Grégory Bulot
Le #23934841
Bonjour, Bonsoir,

Le Fri, 4 Nov 2011 11:20:26 +0100, , vous avez écrit :

mot clé (motcle) = "biographie richard stallman"

$query_string = "SELECT * FROM table WHERE infos LIKE '%$motcle%' ";



- transformer $motcle en tableau
- like '%$motcle[1] or like '%$motcle[1] .... ainsi de suite jusqu'au
dernier mot

--
Cordialement
Grégory BULOT

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
h.wismes
Le #23934881
Le vendredi 04 novembre 2011, Grégory Bulot a écrit :
Le Fri, 4 Nov 2011 11:20:26 +0100, , vous avez écrit :
> mot clé (motcle) = "biographie richard stallman"
> $query_string = "SELECT * FROM table WHERE infos LIKE '%$motcle%' ";

- like '%$motcle[1] or like '%$motcle[1] .... ainsi de suite jusqu'au de rnier mot
Grégory BULOT


--------------

Ne serait-ce pas : like '%$motcle[1] or like '%$motcle[2]

- transformer $motcle en tableau :


Tableau = array ?

ainsi de suite jusqu'au dernier mot :


Comment compter les mots du mot clé ?

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Grégory Bulot
Le #23934971
Bonjour, Bonsoir,

Le Fri, 4 Nov 2011 11:51:27 +0100, , vous avez écrit :


Ne serait-ce pas : like '%$motcle[1] or like '%$motcle[2]



Si toutafait :-D

Comment compter les mots du mot clé ?



Autant de solutions que de Dev php présent sur cette liste,

je ferais un foreach
http://docs.php.net/manual/fr/control-structures.foreach.php




--
Cordialement
Grégory BULOT

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Jean-Michel OLTRA
Le #23935021
Bonjour,


Le vendredi 04 novembre 2011, a écrit...


Dans le cadre d'une recherche d'informations dans
une base de données, par mots clé, je n'arrive pas
à concrétiser ce type de recherche :

Le mieux est de donner un exemple.

mot clé (motcle) = "biographie richard stallman"

$query_string = "SELECT * FROM table WHERE infos LIKE '%$motcle%' ";

Or, le nom "stallman" existe bien dans la base mais
"biographie richard stallman" n'est pas contenu dans "stallman".

Comment faire alors le contraire, c'est à dire faire la recherche
selon "stallman' contenu dans "biographie richard stallman" ?



Quel serveur de bases de données ?

Tu pourrais regarder si les possibilités de la recherche fulltext te
conviennent ?

Sinon, sous mysql voir si tu peux utiliser les fonctions de regexp ?
select 'Biographie richard Stallman' regexp '.*Stallman';

Ou bien find_in_set ?
select find_in_set('stallman', 'biographie,richard,stallman');


--
jm

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
h.wismes
Le #23935211
Le vendredi 04 novembre 2011, Jean-Michel OLTRA a écrit :
Le vendredi 04 novembre 2011, a écrit...
> Dans le cadre d'une recherche d'informations dans
> une base de données, par mots clé, je n'arrive pas
> à concrétiser ce type de recherche :
> mot clé (motcle) = "biographie richard stallman"
> $query_string = "SELECT * FROM table WHERE infos LIKE '%$motcle%' ";
> Or, le nom "stallman" existe bien dans la base mais
> "biographie richard stallman" n'est pas contenu dans "stallman".
> Comment faire alors le contraire, c'est à dire faire la recherche
> selon "stallman' contenu dans "biographie richard stallman" ?


----------------------
Quel serveur de bases de données ? :


MySQL

Tu pourrais regarder si les possibilités de la recherche fulltext te conviennent ?


J'ai vu intéressant mais :
Erreur de la requete SELECT * FROM table WHERE MATCH (liens , comments) AGA INST ('biographie richard stallman') .

Sinon, sous mysql voir si tu peux utiliser les fonctions de regexp ?
select 'Biographie richard Stallman' regexp '.*Stallman'; :


Oui, mais il faut détacher chaque mot automatiquement
car $var=variable à contenu aléatoire

Ou bien find_in_set ?
select find_in_set('stallman', 'biographie,richard,stallman');
jm



La solution serait sans doute :
- ($var=variable à contenu aléatoire) ici : $var="biographi e richard stallman";
- $var = explode(' ', $var);
- détacher chaque mot par leur variable : $mot1 , $mot2, $mot3 ...
- select find_in_set('$mot1' , '$mot2' , '$mot3') ....

et cerise sur le gâteau, supprimer les mots inopportuns :
de, le, la, du, ... etc ...

Merci

Henri

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Debian liste FR
Le #23935271
Bonjour

Or, le nom "stallman" existe bien dans la base mais
"biographie richard stallman" n'est pas contenu dans "stallman".

Comment faire alors le contraire, c'est à dire faire la recherche
selon "stallman' contenu dans "biographie richard stallman" ?



J'avoue ne pas saisir le sens de ton expression de besoin.
Cherches-tu à ne récupérer que les enregistrements qui contiennent ET
biographie ET richard ET stallman ?

Quel serait la syntaxe SQL ou php en ce sens ... ?


amha, SQL

D'autres critères rentrent en compte, comme la base de données. Par
exemple, mysql (d'autres aussi) a des méthodes de recherche et
d'extraction enrichies, sur des champs plus spécifique comme "fullText".

p.s. Dans le cas de recherche de caractères, "=" fera la distinction
minuscules/majuscules, et LIKE les confondra, ce qui peut être utile

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Jean-Michel OLTRA
Le #23935341
Bonjour,


Le vendredi 04 novembre 2011, a écrit...


> Tu pourrais regarder si les possibilités de la recherche fulltext te conviennent ?
J'ai vu intéressant mais :
Erreur de la requete SELECT * FROM table WHERE MATCH (liens , comments) AGAINST ('biographie richard stallman') .



As tu rajouté l'index fulltext ?

alter table `table` add fulltext(liens,comments);

Voir également les possibilités de 'query expansion' pour la recherche
fulltext, éventuellement : against ('motif' with query expansion)

--
jm

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Jean-Yves F. Barbier
Le #23935411
On Fri, 4 Nov 2011 11:20:26 +0100
wrote:

mot clé (motcle) = "biographie richard stallman"

$query_string = "SELECT * FROM table WHERE infos LIKE '%$motcle%' ";

Or, le nom "stallman" existe bien dans la base mais
"biographie richard stallman" n'est pas contenu dans "stallman".

Comment faire alors le contraire, c'est à dire faire la recherche
selon "stallman' contenu dans "biographie richard stallman" ?



Code symbolique:
SELECT * FROM table WHERE infos LIKE '%motcle1%' INTERSECT
SELECT * FROM table WHERE infos LIKE '%motcle2%' INTERSECT
SELECT * FROM table WHERE infos LIKE '%motcle3%';

Avec logiquement: motcle1='stallman', motcle2='biographie', motcle3=' richard'.
(d'ailleurs est-ce que 'richard' est vraiment un critère puisque 'stal lman'
est un nom peu répandu, et l'association 'stallman' & 'biographie' enc ore
moins...?)

Cependant, et quelque soit le moteur de DB, une recherche de type 'LIKE' est
loin d'être neutre en terme de perfs (puisqu'il va falloir systém atiquement
que tout soit d'abord converti en minuscules avant la recherche proprement
dite).

Une indexation fulltext peut être une solution, mais il faudra penser à
nourrir correctement le dictionnaire; la solution la plus rapide (si tant
est que ce type de recherche doive se répéter souvent) consistera it à
ajouter des tags sur lesquels on effectue les recherches.
YMMV puisque ça dépend directement du type de texte dans lequel l es
recherches sont effectuées - si ce sont des milliers d'articles,
plutôt fulltext, si c'est bcp moins que cela, plutôt tags.

Quel serait la syntaxe SQL ou php en ce sens ... ?



SQL


--
He who sneezes without a handkerchief takes matters into his own hands.

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
h.wismes
Le #23935631
Le vendredi 04 novembre 2011, Jean-Michel OLTRA a écrit :
Le vendredi 04 novembre 2011, a écrit...
> > Tu pourrais regarder si les possibilités de la recherche fulltex t te
> > conviennent ?
> J'ai vu intéressant mais :
> Erreur de la requete SELECT * FROM table WHERE MATCH (liens , comments)
> AGAINST ('biographie richard stallman') .
As tu rajouté l'index fulltext ?
alter table `table` add fulltext(liens,comments);
Voir également les possibilités de 'query expansion' pour la re cherche
fulltext, éventuellement : against ('motif' with query expansion)
jm


---------------

Merci Jean-Michel,

et à tous ceux qui m'ont répondu.

Avec les champs "fulltext" dans la table MySQL, la requête SQL :

SELECT * FROM table WHERE MATCH (liens , comments) AGAINST ('biographie de richard stallman')

renvoient un résultat sur tous les mots,
et le mot "de" ne semble pas pas pris en compte (ce que je veux).

Henri

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
fra-duf-no-spam
Le #23935781
Le 15282ième jour après Epoch,
Grégory Bulot écrivait:

Bonjour, Bonsoir,

Le Fri, 4 Nov 2011 11:51:27 +0100, , vous avez écrit :


Ne serait-ce pas : like '%$motcle[1] or like '%$motcle[2]



Si toutafait :-D

Comment compter les mots du mot clé ?



Autant de solutions que de Dev php présent sur cette liste,

je ferais un foreach
http://docs.php.net/manual/fr/control-structures.foreach.php



Idéalement, explode¹ est ton ami

[1] http://php.net/manual/fr/function.explode.php

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Publicité
Poster une réponse
Anonyme