Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2404 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [php] recherche dans ma bdd, sans la faire peter

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[php] recherche dans ma bdd, sans la faire peter

n°1787348
tomsoft
Posté le 15-09-2008 à 22:53:52  profilanswer
 

:hello:  
 
imaginons une table article, avec un champ description contenant du code html
 
imaginons un formulaire de recherche, avec un champ mot clé,
 
si ce champ contient un mot, appelons le "motclé",  
 
ok :

Code :
  1. MysqlDB::requete("SELECT id FROM article WHERE description LIKE '%$motcle%');


 
mais si motclé = 'mot1 mot2',  
 
moi je veut rechercher en priorité ceux qui ont les deux a la suite, et apres les deux mots pas forcement qui se suivent ni dans le meme ordre, et apres ceux qui ont l'un ou l'autre.
 
ok pour deux mots clés c'est gerable,  
 
mais pour n mots clés ?
 
j'envoi chier le client ?  [:cerveau chacal_one]

mood
Publicité
Posté le 15-09-2008 à 22:53:52  profilanswer
 

n°1787462
olivthill
Posté le 16-09-2008 à 09:47:15  profilanswer
 

Il suffit de respecter la première règle de normalisation de E. Codd, qui veut qu'un champ ne contienne qu'une seule information atomique, et non pas deux ou n.
Pour cela, il n'est nécessaire que de remplacer "mot1... motn" dans le champ "motclé" par un lien_liste_mots. Ce lien serait une cléf étrangère vers une nouvelle table T_liste_mots, qui contiendrait donc le lien plus un numéro de séquence et un mot. A chaque nouveau mot, il y aurait un enregistrement nouveau dans cette table. Cette table n'a pas besoin d'être visible de l'utilisateur. C'est juste une organisation interne de la base.
Bon courage !

n°1787468
flo850
moi je
Posté le 16-09-2008 à 10:01:18  profilanswer
 

l'approche d'ovithill ets la plus propre, masi pour eviter de reinventer la roue, tu peux utiliser des outils spécifiques de recherche full text ( comem sphinx ou solr )  qui prendront , en plus , en compte les declinaisons des mots

 

sinon, l'approche bourrine

Code :
  1. $mots = explode(' ', $motcle);
  2. $query = "SELECT id FROm article WHERE 1 ";
  3. foreach($mots as $mot)
  4.    $query.=" AND description LIKE '%$mot%'";

Message cité 1 fois
Message édité par flo850 le 16-09-2008 à 10:01:35
n°1787571
skeye
Posté le 16-09-2008 à 12:33:14  profilanswer
 

flo850 a écrit :

l'approche d'ovithill ets la plus propre, masi pour eviter de reinventer la roue, tu peux utiliser des outils spécifiques de recherche full text ( comem sphinx ou solr )  qui prendront , en plus , en compte les declinaisons des mots

 

sinon, l'approche bourrine

Code :
  1. $mots = explode(' ', $motcle);
  2. $query = "SELECT id FROm article WHERE 1 ";
  3. foreach($mots as $mot)
  4.    $query.=" AND description LIKE '%$mot%'";



OR, pas AND, si tu veux gérer tous les cas.[:joce]

 

(enfin en remplaçant le where 1, du coup.[:chrisbk])

Message cité 2 fois
Message édité par skeye le 16-09-2008 à 12:34:02

---------------
Can't buy what I want because it's free -
n°1787612
NewsletTux
<Insérez ici votre vie />
Posté le 16-09-2008 à 13:56:38  profilanswer
 

skeye a écrit :


(enfin en remplaçant le where 1, du coup.[:chrisbk])


nan pas dans FloMyAdmin :o


---------------
NewsletTux - outil de mailing list en PHP MySQL
n°1787618
tomsoft
Posté le 16-09-2008 à 14:07:34  profilanswer
 

ok, je viens de realiser que n'importe quel systeme fait peter la bd en nombre de resultats si l'utilisateur tape par exemple "z 750",  
 
bah ca cherche un z dans la description, donc ya enormement de resultats,  
 
avec like, je peut faire des expression regulieres "avancées" ?
 
pour dire que je recherche z, mais pas entouré d'autres lettres, juste entouré d'espaces, de points, de virgules ...
 
/me suis ptet mal expliqué ;)

n°1787619
skeye
Posté le 16-09-2008 à 14:09:04  profilanswer
 

NewsletTux a écrit :


nan pas dans FloMyAdmin :o


hein?[:pingouino]


---------------
Can't buy what I want because it's free -
n°1787621
skeye
Posté le 16-09-2008 à 14:09:50  profilanswer
 

tomsoft a écrit :

ok, je viens de realiser que n'importe quel systeme fait peter la bd en nombre de resultats si l'utilisateur tape par exemple "z 750",  
 
bah ca cherche un z dans la description, donc ya enormement de resultats,  
 
avec like, je peut faire des expression regulieres "avancées" ?
 
pour dire que je recherche z, mais pas entouré d'autres lettres, juste entouré d'espaces, de points, de virgules ...
 
/me suis ptet mal expliqué ;)


Tu peux donner un minimum de taille pour ce qui est considéré comme un mot.


---------------
Can't buy what I want because it's free -
n°1787625
tomsoft
Posté le 16-09-2008 à 14:11:15  profilanswer
 

oui effectivement, mais "z 750" est un modele de moto en l'occurence, je voudrais quand meme afficher les produits contenant "z" tout seul, meme si ca ne fait qu'un charactere :/

n°1787626
skeye
Posté le 16-09-2008 à 14:12:14  profilanswer
 

tomsoft a écrit :

oui effectivement, mais "z 750" est un modele de moto en l'occurence, je voudrais quand meme afficher les produits contenant "z" tout seul, meme si ca ne fait qu'un charactere :/


non, tu veux afficher ceux contenant "z 750", pas ceux contenant "z" ou "750"...[:aloy]


---------------
Can't buy what I want because it's free -
mood
Publicité
Posté le 16-09-2008 à 14:12:14  profilanswer
 

n°1787637
flo850
moi je
Posté le 16-09-2008 à 14:18:23  profilanswer
 

skeye a écrit :


OR, pas AND, si tu veux gérer tous les cas.[:joce]
 
(enfin en remplaçant le where 1, du coup.[:chrisbk])


 
j'ai effectivement mal compris la question :o

n°1787681
tomsoft
Posté le 16-09-2008 à 15:33:06  profilanswer
 

skeye a écrit :


non, tu veux afficher ceux contenant "z 750", pas ceux contenant "z" ou "750"...[:aloy]


 
non, je veut afficher ceux contenant z et ceux contenant 750, mais considerés comme des mots, ainsi l'article :
 
"blabla z bla" sortirai,
"blablaz bla"  ne sortirai pas


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [php] recherche dans ma bdd, sans la faire peter

 

Sujets relatifs
Recherche éditeur de site web ! payé bien sur ![PHP MYSQL] Recherche table
Facteur de division dans une recherche dichotomiquerecherche d un forum
[RESOLU] Recherche code touche enfoncé, pour du javascriptRecherche codeur sérieux
[PHP] Trier résultats sans effectuer une nouvelle rechercherecherche codeur php
Recherche testeurs 
Plus de sujets relatifs à : [php] recherche dans ma bdd, sans la faire peter


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR