Requete sql

WRInaute impliqué
Bonjour,

soit a= toto est un blond
b=un toto est blond.

J'essaye de trouver un moyen de faire une requete sur la table b ou $nom(b) like $nom(a).
En faisant un like classique ça ne fonctionne pas.

Qqun aurait une idée ou je peux laisser tomber ?
 
WRInaute occasionnel
Tu peux faire via php une recoupe de $nom(B) sur les espaces :
tu places le tout dans un tableau.
Idem avec $nom(A) et tu compares si chaque élément de B apparait au moins une fois dans A.
Tu compte le nombre d'éléments total de B.
Tu incrémente le compteur à chaque fois que tu trouve une occurence de l'élément du Tableau B dans celui de A.
Tu fais un ratio et t'as un indice de similitude....

Parce que j'aime faire compliqué :wink:
 
WRInaute impliqué
Je reprends:

Code:
soit table a (id, phrase, numéro) avec comme entrée
1 toto est un blond 25

table b (id, phrase, numéro) avec comme entrée
25 un toto est  blond 30

Notez que le champ phrase est légérement différent.

Sur une page php, je récupérere par un $get(phrase) de la table a (soit toto est un blond).
Je fais une requete sur table a où $phrase=$get(phrase) ==> Hop j'affiche le numéro soit 25

Ensuite, je voudrais faire une requete sur la table b pour afficher le numéro (soit le nombre 30). Je ne peux pas faire avec les ids vu qu'ils sont différents. DONC:
Je teste select from b where $phrase like %$get(phrase)% ==> aucune réponse.

Ya t-il un autre moyen ?


@ Djibou_Te@M:
En gros passer par les explode et comparer ?
 
WRInaute impliqué
Code:
$query = mysql_query("select * from table b")
while ($row = mysql_fetch_array($query)) {
      similar_text($get['phrase'],$row['phrase'], $pourcentage);
      if ($pourcentage== 100){
       echo $row['numero'];
       }
    }
?>

Je sais pas si ça peut marcher ???
 
WRInaute occasionnel
Oui les explode et fonction similar text sont une solution mais sur un exemple simple ça va, si on commence à parser un page HTML par exemple :wink: ou un contenu pour voir s'il y a pas du duplicate dans l'air, là le serveur risque de saturer s'il n'a pas les "ressources" suffisantes.
Il me semble aussi qu'il existe un agrégat sql basé sur le "LIKE", les LIKE '%...%' en sont l'un d'entre eux. Je sais que je l'ai déjà utilisé pour un site client de ma boite, mais, je me souviens plus lequel (en même temps nous n'en avons pas qu'un).

Je vais rechercher ça, c'est le moins gourmand de toutes les solutions de recherches, à condition de pondérer le ou les termes (300 Ko de données à scruter, cela risque de ne pas être plaisant pour le serveur)
Il me semble que je passais par des expressions régulières et du LIKE, je sais plus, je te tiens au courant.
 
WRInaute accro
C'est quoi le critère pour qu'il y ait "égalité"? Les mêmes mots, mais pas forcément dans le même ordre? Ou "ça ressemble vaguement"? Dans le deuxième cas, il va falloir être nettement plus précis.

Dans le premier, il suffit de découper le texte en mots, de les trier, et de les ré-assembler. Evidemment, il faut que dans ta base tu les stockes sous la forme "canonique" (i.e. avec les mots triés).

Accessoirement, je ne sais pas si c'est une coïncidence de ton exemple ou pas, mais tu ne peux pas utiliser numéro -> id?

Jacques.
 
Discussions similaires
Haut