D=E9sol=E9 de cette question pas 100% Debian,
mais MySQL tourne sous Debian Jessie :-)
$brief est une variable correspondant =E0 un mot cl=E9
qui ne peut contenir que 3 infos maxi s=E9par=E9es par un espace.
On va supposer que le mot cl=E9 =3D "paris"
SELECT DISTINCT email, prenom, famille, ville FROM table=20
WHERE MATCH (email, prenom, famille, ville)=20
AGAINST ('+$brief[0] +$brief[1] +$brief[2]' IN BOOLEAN MODE)
et la base affiche toutes les personnes qui ont une info li=E9e =E0 Paris.
Mais si le mot cl=E9 =3D" par"
la base ne m'affiche aucun r=E9sultat.
Elle ne va matcher que les infos qui contiennent * exactement * "par"
J'ai tent=E9 cette m=E9thode (ajouter un "%" de part et d'autres de la vari=
able) :
AGAINST ('+%$brief[0]% +%$brief[1]% +%$brief[2]%' IN BOOLEAN MODE)
=E7a ne fonctionne pas.
Dommage, car c'est utile lorsque on est pas s=FBr de l'orthographe d'un cha=
mp,
et que l'on a retenu que ses x premi=E8res lettres.
Il y a cette m=E9thode mais trop basique car elle ne permet pas des recherc=
hes
sur mots cl=E9s multiples :
SELECT DISTINCT email, prenom, famille, ville FROM table=20
WHERE email LIKE '%$brief%' OR ville LIKE '%$brief%' ...
Ma question : comment le faire avec : ... WHERE MATCH ... AGAINST
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
S
Bonjour,
Le mardi 02 février 2016 à 11:34, a écrit :
SELECT DISTINCT email, prenom, famille, ville FROM table WHERE MATCH (email, prenom, famille, ville) AGAINST ('+$brief[0] +$brief[1] +$brief[2]' IN BOOLEAN MODE)
Attention aux concaténations de chaînes de caractères lors de l'initialisation d'une requête, c'est souvent par là qu'arrivent les injections SQL…
Sébastien
Bonjour,
Le mardi 02 février 2016 à 11:34, andre_debian@numericable.fr a écrit :
SELECT DISTINCT email, prenom, famille, ville FROM table
WHERE MATCH (email, prenom, famille, ville)
AGAINST ('+$brief[0] +$brief[1] +$brief[2]' IN BOOLEAN MODE)
Attention aux concaténations de chaînes de caractères lors de l'initialisation
d'une requête, c'est souvent par là qu'arrivent les injections SQL…
SELECT DISTINCT email, prenom, famille, ville FROM table WHERE MATCH (email, prenom, famille, ville) AGAINST ('+$brief[0] +$brief[1] +$brief[2]' IN BOOLEAN MODE)
Attention aux concaténations de chaînes de caractères lors de l'initialisation d'une requête, c'est souvent par là qu'arrivent les injections SQL…
Sébastien
BERBAR Florian
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256
On 02/02/2016 11:34, wrote:
Bonjour,
Désolé de cette question pas 100% Debian, mais MySQL tourne sous Debian Jessie :-)
$brief est une variable correspondant à un mot clé qui ne peut contenir que 3 infos maxi séparées par un espace.
On va supposer que le mot clé = "paris"
SELECT DISTINCT email, prenom, famille, ville FROM table WHERE MATCH (email, prenom, famille, ville) AGAINST ('+$brief[0] +$brief[1] +$brief[2]' IN BOOLEAN MODE)
et la base affiche toutes les personnes qui ont une info liée à Paris.
Mais si le mot clé =" par" la base ne m'affiche aucun résultat. Elle ne va matcher que les infos qui contiennent * exactement * "par"
J'ai tenté cette méthode (ajouter un "%" de part et d'autres de la variable) : AGAINST ('+%$brief[0]% +%$brief[1]% +%$brief[2]%' IN BOOLEAN MODE) ça ne fonctionne pas.
Dommage, car c'est utile lorsque on est pas sûr de l'orthographe d'un champ, et que l'on a retenu que ses x premières lettres.
Il y a cette méthode mais trop basique car elle ne permet pas des recherches sur mots clés multiples : SELECT DISTINCT email, prenom, famille, ville FROM table WHERE email LIKE '%$brief%' OR ville LIKE '%$brief%' ...
Ma question : comment le faire avec : ... WHERE MATCH ... AGAINST
Merci.
André
Bonjour André,
Je en regardant la requête SQL utilisant la fonction AGAINST que tu essais d’exécuter, nous pouvoir voir que tu tentes d'utiliser le caractère joker (wildcard) '%' afin de compléter les mots clefs servant de critère à ta requête à l'image de ce que tu pourrais faire à l'aide de la fonction LIKE.
La documentation de MySQL au sujet du couple de fonction MATCH et AGAINST (https://dev.mysql.com/doc/refman/5.5/en/fulltext-search.html#function_m atch), ne fait pas référence à la possibilité d'utiliser des caractères jokers (wildcard) à l'image de ce que tu pourrais faire avec la fonction LIKE (https://dev.mysql.com/doc/refman/5.7/en/string-comparison-functions.htm l#operator_like). Il semblerait que tu sois contraint à l’utilisation de mot complet.
On 02/02/2016 11:34, andre_debian@numericable.fr wrote:
Bonjour,
Désolé de cette question pas 100% Debian, mais MySQL tourne sous
Debian Jessie :-)
$brief est une variable correspondant à un mot clé qui ne peut
contenir que 3 infos maxi séparées par un espace.
On va supposer que le mot clé = "paris"
SELECT DISTINCT email, prenom, famille, ville FROM table WHERE
MATCH (email, prenom, famille, ville) AGAINST ('+$brief[0]
+$brief[1] +$brief[2]' IN BOOLEAN MODE)
et la base affiche toutes les personnes qui ont une info liée à
Paris.
Mais si le mot clé =" par" la base ne m'affiche aucun résultat.
Elle ne va matcher que les infos qui contiennent * exactement *
"par"
J'ai tenté cette méthode (ajouter un "%" de part et d'autres de la
variable) : AGAINST ('+%$brief[0]% +%$brief[1]% +%$brief[2]%' IN
BOOLEAN MODE) ça ne fonctionne pas.
Dommage, car c'est utile lorsque on est pas sûr de l'orthographe
d'un champ, et que l'on a retenu que ses x premières lettres.
Il y a cette méthode mais trop basique car elle ne permet pas des
recherches sur mots clés multiples : SELECT DISTINCT email, prenom,
famille, ville FROM table WHERE email LIKE '%$brief%' OR ville LIKE
'%$brief%' ...
Ma question : comment le faire avec : ... WHERE MATCH ... AGAINST
Merci.
André
Bonjour André,
Je en regardant la requête SQL utilisant la fonction AGAINST que tu
essais d’exécuter, nous pouvoir voir que tu tentes d'utiliser le
caractère joker (wildcard) '%' afin de compléter les mots clefs
servant de critère à ta requête à l'image de ce que tu pourrais faire
à l'aide de la fonction LIKE.
La documentation de MySQL au sujet du couple de fonction MATCH et
AGAINST
(https://dev.mysql.com/doc/refman/5.5/en/fulltext-search.html#function_m
atch),
ne fait pas référence à la possibilité d'utiliser des caractères
jokers (wildcard) à l'image de ce que tu pourrais faire avec la
fonction LIKE
(https://dev.mysql.com/doc/refman/5.7/en/string-comparison-functions.htm
l#operator_like).
Il semblerait que tu sois contraint à l’utilisation de mot complet.
Désolé de cette question pas 100% Debian, mais MySQL tourne sous Debian Jessie :-)
$brief est une variable correspondant à un mot clé qui ne peut contenir que 3 infos maxi séparées par un espace.
On va supposer que le mot clé = "paris"
SELECT DISTINCT email, prenom, famille, ville FROM table WHERE MATCH (email, prenom, famille, ville) AGAINST ('+$brief[0] +$brief[1] +$brief[2]' IN BOOLEAN MODE)
et la base affiche toutes les personnes qui ont une info liée à Paris.
Mais si le mot clé =" par" la base ne m'affiche aucun résultat. Elle ne va matcher que les infos qui contiennent * exactement * "par"
J'ai tenté cette méthode (ajouter un "%" de part et d'autres de la variable) : AGAINST ('+%$brief[0]% +%$brief[1]% +%$brief[2]%' IN BOOLEAN MODE) ça ne fonctionne pas.
Dommage, car c'est utile lorsque on est pas sûr de l'orthographe d'un champ, et que l'on a retenu que ses x premières lettres.
Il y a cette méthode mais trop basique car elle ne permet pas des recherches sur mots clés multiples : SELECT DISTINCT email, prenom, famille, ville FROM table WHERE email LIKE '%$brief%' OR ville LIKE '%$brief%' ...
Ma question : comment le faire avec : ... WHERE MATCH ... AGAINST
Merci.
André
Bonjour André,
Je en regardant la requête SQL utilisant la fonction AGAINST que tu essais d’exécuter, nous pouvoir voir que tu tentes d'utiliser le caractère joker (wildcard) '%' afin de compléter les mots clefs servant de critère à ta requête à l'image de ce que tu pourrais faire à l'aide de la fonction LIKE.
La documentation de MySQL au sujet du couple de fonction MATCH et AGAINST (https://dev.mysql.com/doc/refman/5.5/en/fulltext-search.html#function_m atch), ne fait pas référence à la possibilité d'utiliser des caractères jokers (wildcard) à l'image de ce que tu pourrais faire avec la fonction LIKE (https://dev.mysql.com/doc/refman/5.7/en/string-comparison-functions.htm l#operator_like). Il semblerait que tu sois contraint à l’utilisation de mot complet.
Un SGBDR est pas très performant sur ce genre de chose (même si p ostgresql fait un peu mieux je crois), pour de gros volume ajouter un solr ou elasticsearch est finalement plus simple (on le configure une fois en lui donnant les champs à indexer et il fournit a utocompletion et recherche par facette, entre autre). Pour de petits volume, faut ajouter un peu de code.
Un SGBDR est pas très performant sur ce genre de chose (même si p ostgresql fait un peu mieux je
crois), pour de gros volume ajouter un solr ou elasticsearch est finalement plus simple (on le
configure une fois en lui donnant les champs à indexer et il fournit a utocompletion et
recherche par facette, entre autre). Pour de petits volume, faut ajouter un peu de code.
Un SGBDR est pas très performant sur ce genre de chose (même si p ostgresql fait un peu mieux je crois), pour de gros volume ajouter un solr ou elasticsearch est finalement plus simple (on le configure une fois en lui donnant les champs à indexer et il fournit a utocompletion et recherche par facette, entre autre). Pour de petits volume, faut ajouter un peu de code.