SELECT DISTINCT dans un text et longtext

SELECT DISTINCT dans un text et longtext - SQL/NoSQL - Programmation

Marsh Posté le 04-11-2005 à 11:21:10    

Bonjour,
 
Dans ma base mysql, j'ai un champs qui est en text et un autre en longtext. Je voudrais faire une requete mysql pour trouver chaque mot de ces champs, quelque chose du genre :
 
SELECT DISTINCT (chaque mot???) FROM ChampsLongText ORDER BY (mot ???) \G;
 
et qui me retourne la liste (très longue donc) de mots utilisés dans l'ensemble des champs ChampsLongText de ma table. Si je fais une telle requete sur ce mail par exemple, il faudrait qu'il me retourne :
 
"
enregistrement 1 :
base
---------------------
enregistrement 2 :
champs
---------------------
enregistrement 3 :
faire
 
etc etc..."
 
J'espère que ma question est claire et que quelqu'un pourra m'aider. je ne sais pas si c'est ce type de requete qui convient, et je ne sais pas quoi mettre à la place des trucs entre paranthèses avec des points d'interrogation...
 
Aah oui, et pour rendre la chose un tout petit peu plus compliqué, il faudrait que je puisse dire que je ne veux que les mots qui commencent avec la lettre "a" par exemple, genre de requete :
 
SELECT DISTINCT (chaque mot???) FROM ChampsLongText ORDER BY (mot ???) WHERE (mot commence par a ????) \G;
 
Merci d'avance,
 
Thiebo

Reply

Marsh Posté le 04-11-2005 à 11:21:10   

Reply

Marsh Posté le 04-11-2005 à 11:39:52    

Je ne sais pas si c'est faisable en sql pur, ton histoire...[:pingouino]
En tout cas je ne vois pas de solution...[:urd]
 
C'est quoi l'objectif final? S'en servir de dictionnaire? :??:


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 04-11-2005 à 11:59:59    

skeye a écrit :


C'est quoi l'objectif final? S'en servir de dictionnaire? :??:


 
Exactement ! Le champs ChampsLongText est en latin médiéval et ancien français (donc pas des langues dont tout et n'importe qui connaît les mots) et les explications (contenues dans d'autres champs) en français. Je voudrais pourvoir sélectionner chaque mot distinctement du champs ChampsLongText (disont MotChampsLongText) pour ensuite créer une nouvelle requete :
 
SELECT * FROM Mytable WHERE ChampsLongText LIKE '%MotChampsLongText%';
 
pour que l'utilisateur ne trouve que les enregistrements contenant ce mot si important.  
 
J'espère très très vivement que ce soit possible parce que c'est carrément une des fonctionalités les plus importantes de mon site.
 
Vous voyez le souci ? si le champs ChampsLongText était écrit en français ou anglais, j'aurais pu créer un formulaire html avec un input type="text" laissant à l'utilisateur la liberté de remplir le mot qu'il veut... mais comme c'est dans des langues mortes avec un vocabulaire instable et quasiment inconnu... je voudrais faire un formulaire html avec select... parce que sinon personne ne trouvera jamais rien (ce serait triste non ????)
 
si vous avez d'autres solutions... (est ce que c'est possible avec postgresql ???), ou des idées de solution, ce serait supersympa !

Reply

Marsh Posté le 04-11-2005 à 12:03:13    

...et tu voudrais pas faire ce traitement une fois pour toutes? Une table pour la liste des mots, et une pour le lien entre cette table et ta table actuelle?


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 04-11-2005 à 13:34:55    

skeye a écrit :

...et tu voudrais pas faire ce traitement une fois pour toutes? Une table pour la liste des mots, et une pour le lien entre cette table et ta table actuelle?


 
J'y avais pensé mais ce n'est pas possible, parce que j'entre mes textes au fur et à mesure, et il y a déjà près de 2.000 textes.... donc s'il faut que je me tape à faire une table en plus contenant uniquement les mots.... ça va être long, très très long.


Message édité par thiebo12375 le 04-11-2005 à 13:35:36
Reply

Marsh Posté le 04-11-2005 à 13:38:44    

bah ajoute une procédure qui parcourt ton texte et remplit ton dico au moment où tu rentres ton texte, non?
Faire ça en dynamique c'est du suicide, à mon avis...:/


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 04-11-2005 à 14:16:51    

skeye a écrit :

bah ajoute une procédure qui parcourt ton texte et remplit ton dico au moment où tu rentres ton texte, non?
Faire ça en dynamique c'est du suicide, à mon avis...:/


 
Ton idée est effectivement très bonne pour les actes à entrer par la suite - reste que j'ai un souci pour les actes déjà existants.
 
J'ai cru comprendre que c'est très très chaud en effet. Mon frère m'a proposé de faire une requete qui sélectionne les champs ChampsLongText les retourne à php et de faire une fonction en php qui saucissonne les texte sur les espaces et apostrophes et qui ensuite classe les mots par ordre alphabétique.  
 
Là je dis.... pfoui !!! Ca va être chaud aussi parce qu'à la longue il y aura beaucoup de mots et que php aura besoin de temps pour le faire, que la fonction n'est pas si simple et que je ne suis pas certain que ce soit la meilleure méthode. Qu'en penses-tu ?
 
Merci en tous cas pour tes réponses - ton idée de table supplémentaire rien que pour le dicco est pas mal du tout. J'ai du travail sur la planche avec ça, mais c'est peut être une des meilleures solutions.

Reply

Marsh Posté le 04-11-2005 à 14:19:54    

J'en penses que ce que ton frère te propose me semble la seule solution relativement simple à mettre en place...ca te fait une moulinette longue à faire tourner la première fois, puis à lancer automatiquement sur chaque nouveau texte entré...
Et derrière le boulot est nettement plus simple, et surtout probablement énormément plus rapide... ;)


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 04-11-2005 à 16:26:41    

Merci encore. Je pense que je vais mettre en pratique vos deux solutions, c'est à dire :
1. Créer une table dicco.
2. Créer la fonction moulinette de mon frère et mettre les résultats de cette fonction dans la table dicco.
3. Créer une fonction qui décompose le texte à chaque nouvelle entrée et qui inscrit les entrées nécessaires dans la table dicco
4. Utiliser la table dicco pour les <select> du formulaire html permettant de chercher les entrées contenant les mots cherchés.
 
Je sens que je vais y passer quelques bonnes soirées. Ou comme on dit en latin : oh felice me (que je suis heureux)

Reply

Marsh Posté le 04-11-2005 à 16:29:13    

Normalement tu n'as besoin que d'une fonction, et ta moulinette va lire le contenu déjà entré dans ta base pour la passer par cette fonction...;)


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 04-11-2005 à 16:29:13   

Reply

Marsh Posté le 04-11-2005 à 17:19:52    

Je vais essayer de faire comme ça oui. J'avoues que je n'ai jamais eu besoin d'écrire de fonctions de traitement de strings avant, donc il faudra que je me tape un peu de manuel de php avant de toutes manières. :/

Reply

Marsh Posté le 04-11-2005 à 17:20:57    

explode() devrait être ton ami... :D


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 04-11-2005 à 17:30:41    

skeye a écrit :

explode() devrait être ton ami... :D


genre :
 
explode(" ", $string);
 
pour couper les mots à chaque espace ? Le manuel de php m'a l'air très clair. Tu m'as énormément aidé aujourd'hui, je te remercie beaucoup ! :jap:   ;)

Reply

Marsh Posté le 04-11-2005 à 17:58:18    

De rien, c'est une question intéressante...[:petrus75]


---------------
Can't buy what I want because it's free -
Reply

Sujets relatifs:

Leave a Replay

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