[SQL] Comment faire une recherche sur seulement des mots entiers ?

Comment faire une recherche sur seulement des mots entiers ? [SQL] - Programmation

Marsh Posté le 28-10-2001 à 15:21:53    

Je m'explique si je fais une recherche dans ma base mysql sur le mot "Ours" je me retrouve avec tous les mots qui contiennent cette chaine de caracteres donc dans mes resultats j'aurai notamment "jours", "cours" ...  
 
Est ce qu'il y a une fonction inclut dans php qui permet de limiter cette recherche seulement aux mots entiers (entoures de 2 espaces donc)
 
Merci

 

[edtdd]--Message édité par Stligar--[/edtdd]


---------------
Vente privee - Dieu t'a donné deux oreilles et une bouche afin que tu écoutes deux fois plus que tu ne parles.
Reply

Marsh Posté le 28-10-2001 à 15:21:53   

Reply

Marsh Posté le 28-10-2001 à 16:17:40    

:bounce:

Reply

Marsh Posté le 28-10-2001 à 16:23:05    

Il doit y avoir un truc plus propre mais tu pourrais faire un  
 
WHERE phrase like ' ours ' OR phrase like 'ours ' OR phrase like ' ours'
 
Mais il doit y avoir un truc plus propre mais j'en ai jamais eu besoin so j'ai pas cherché :-/

Reply

Marsh Posté le 28-10-2001 à 16:29:53    

Oulala c'est en effet pas tres propre :)
 
Merci pour la reponse mais si qq. avait une autre idee je serai aussi preneur :)

Reply

Marsh Posté le 29-10-2001 à 09:12:21    

je n'ai jamais pratiqué mysql mais un select ... where champ = 'ours' à la place d'un like ne doit ressortir que des valeurs exactes


---------------
Je ne suis ni pour, ni contre, bien au contraire  
Reply

Marsh Posté le 29-10-2001 à 10:02:59    

Ouais à la base le = te retourne que la valeur exact, et le like des morceaux de chaines.
 
A koi ressemble ta requête ?

Reply

Marsh Posté le 31-10-2001 à 03:37:52    

Merci pour vos reponse, mais apparement le = marche pas avec ce genre de chaine (ou alors je m'y prends tres tres mal).
 
 

Code :
  1. $alapeche = "WHERE (keywords like '%$recherche%')";


 
Donc en gros c'est ma requete, ou keywords est un champ comportant plusieurs mots.
celle qui suit ne marche pas  
 

Code :
  1. $alapeche = "WHERE (keywords='%$recherche%')";


 
et j'ai finalement contourne le probleme en mettant des espaces avant et apres le mot recherche
 

Code :
  1. $alapeche = "WHERE (keywords like ' %$recherche% ')";


 
Mais bon je suis pas completement satisfait de la derniere methode, donc si qq. a une idee ?  
 
Merci  :hello:

 

[edtdd]--Message édité par Stligar--[/edtdd]

Reply

Marsh Posté le 31-10-2001 à 04:38:08    

le '=' ne matche que deux strings identiques. dans une table qui comporte
 
1 - 'vive les cours de maths'
2 - 'ours'
3 - 'OURS'
4 - 'J'AIME LES OURS'
5 - 'ohhh le joli ours'
 
select ... where .... = 'ours' ne retournera que la deuxième entrée.
 
... depuis quand 'bonjour' prend un 'S' ? :??: ...
 
il faut utiliser les expressions régulières, et y'a un truc prévu dans mysql directement pour ( http://www.mysql.com/doc/R/e/Regexp.html ) :
 
select .... where keywords regexp '[[:<:]]ours[[:>:]]';
 
attention, c'est case sensitive, donc dans la table d'exemple cette requête ne retournera que les entrées 2 et 5.

 

[edtdd]--Message édité par youdontcare--[/edtdd]

Reply

Marsh Posté le 31-10-2001 à 04:44:17    

youdontcare a écrit a écrit :

... depuis quand 'bonjour' prend un 'S' ? :??: ...
 




 
suis nul en orthographe et alors  ??  :D  
 
En tout cas merci pour ta reponse, vais aller etudier ça de plus pres

Reply

Marsh Posté le 31-10-2001 à 04:53:03    

C'est exactement ce que je recherchais merci bcp !!

Reply

Marsh Posté le 31-10-2001 à 04:53:03   

Reply

Marsh Posté le 04-11-2014 à 18:00:52    

Personnellement, j'utilise ceci dans mes requêtes SQL:
 

Code :
  1. SELECT * From la_table_voulue WHERE champ_désiré REGEXP '([^a-z0-9àáâãäåòóôõöœøèéêëçìíîïùúûüÿñ]|^)le_mot_entier_à_rechercher([^a-z0-9àáâãäåòóôõöœøèéêëçìíîïùúûüÿñ]|$)'


 
(Votre table soit être case insensitive)

Reply

Marsh Posté le 04-11-2014 à 22:39:11    

pour les REGEXP, tout moteur normalement constitué a des "classes" de caractères pour les groupes complexes.
 
Ton expression est bien plus fonctionnelle comme ça (utilisation de la classe "alnum" ) :

Code :
  1. select VAL from test where val REGEXP '(^|[^[:alnum:]])est([^[:alnum:]]|$)';


Message édité par dreameddeath le 04-11-2014 à 22:40:38
Reply

Marsh Posté le 05-11-2014 à 09:20:20    

bluemanca a écrit :

Personnellement, j'utilise ceci dans mes requêtes SQL:
 

Code :
  1. SELECT * From la_table_voulue WHERE champ_désiré REGEXP '([^a-z0-9àáâãäåòóôõöœøèéêëçìíîïùúûüÿñ]|^)le_mot_entier_à_rechercher([^a-z0-9àáâãäåòóôõöœøèéêëçìíîïùúûüÿñ]|$)'


 
(Votre table soit être case insensitive)


Joli déterrage de topic 13 ans après...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed