Compter le nombre d'occurences d'un mot dans une table

Petit nouveau ! | 7 Messages

11 mars 2011, 14:21

Bonjour,

Je cherche à compter le nombre de fois qu'un mot apparait dans certains champs de ma table.

Admettons :

Table "table" ayant les champs "id", "titre", "texte", "date", etc.

Je voudrais savoir combien de fois le mot "mot" existe dans mes champs "titre" et "texte".

MATCH me renvoi une pertinence et COUNT le nombre d'enregistrements de ma table ou le mot apparait. Pas le nombre d'occurence.

SGBD : MySQL
Mes tables sont en MyISAM

Si quelqu'un peut m'aider sur ce coup ...

Merci d'avance.

ViPHP
xTG
ViPHP | 7331 Messages

11 mars 2011, 14:35

Je penserais à deux requêtes séparés (un par champs) à première vue, et ensuite une addition des résultats.
A voir si on peut pas trouver mieux.

Petit nouveau ! | 7 Messages

11 mars 2011, 14:38

Ca êut être une piste en effet. Tout ceci sera en poc stock par la suite.

Par contre, je n'ai aucune idée de comment faire la requête :(

ViPHP
xTG
ViPHP | 7331 Messages

11 mars 2011, 14:44

Il reste tout de même un soucis selon moi, la pertinence d'un tel calcul.
Car actuellement je vois bien qu'on peut savoir si un n-uplet contient ou non la valeur, on peut même aller jusqu'à différencier si elle est dans le titre ou le contenu mais...
C'est pour en faire quoi ensuite ? Car dans tout traitement on prend le n-uplet dans son ensemble et non des bouts sans référence. :/

Ne serais-ce pas juste savoir le nombre de résultats d'une recherche ?

Petit nouveau ! | 7 Messages

11 mars 2011, 14:50

J'ai besoin de cette données pour des calculs par la suite.

Je dois savoir combien de fois un mot apparait dans certains champs de ma table pour ensuite effectuer certains calculs de moyenne et de statistiques.

ViPHP
xTG
ViPHP | 7331 Messages

11 mars 2011, 15:30

Donc c'est pertinent, je n'ai rien dit. :)

Le plus simple serait selon moi de rapatrier les n-uplets répondant au critère et de traiter le comptage en PHP.
A part si quelqu'un connait une fonction miracle en SQL qui permet de renvoyer 2 sur cette valeur : Un chien est un chien. (recherche du mot chien)

En PHP tu peux très bien le faire avec une expression régulière, preg_match_all par exemple te renverra un tableau, il n'y a plus qu'à compter le nombre d'occurences de ce tableau pour connaître le nombre de mots.

Quant à la requête, rien de plus simple, on peut faire ainsi :
SELECT titre, texte FROM table WHERE titre LIKE '%ma_recherche%' OR texte LIKE '%ma_recherche%'

Petit nouveau ! | 7 Messages

11 mars 2011, 15:45

Y a pas de mal :)

Je vais tester la requête.

Pour info, la base est en MySQL mais l'appli en c# et non php ;)

Ce serait trop simple.

Edit : Bon, la requête fonctionne mais ne fait comme je le pensais "que" me ramener les enregitrements concernés ...

ViPHP
xTG
ViPHP | 7331 Messages

11 mars 2011, 16:39

Ah bah évidement qu'elle ne renvoie que les enregistrements concernés.
Si tu veux tous les enregistrements et des stats dessus dans ce cas il faudrait faire le traitement directement en C# (les expressions régulières y sont aussi bien implémentées qu'en PHP ;) ).
Bref un SELECT sans condition.

Petit nouveau ! | 7 Messages

11 mars 2011, 16:42

Yes, en fait je fait mon traitement et mes calculs en c#.

Bon, donc la solution n'est pas la bonne.

Je voulais faire une proc stock de cette fonction moi :(

Merci quand même pur ton aide.