PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → filtrage avancé sur requête ou table
filtrage avancé sur requête ou table
Iniciado por GB, 24,may. 2020 20:07 - 7 respuestas
Miembro registrado
371 mensajes
Publicado el 24,mayo 2020 - 20:07
Bonsoir a tous,

Je souhaite dans mon appli affecter des mots clés à des documents. Ces mots clés sont stockés dans une rubrique texte et séparés par un RC. (dans la rubrique on a donc motclé1 RC motclé2 RC ....)

Dans une fenêtre je souhaite pouvoir cocher les mots clés qui correspondent aux documents que je recherche et afficher les résultats.

Exemple :

Je veux voir les documents contenant le motclé1 ou/et le motclé2.

Je ne vois pas comment procéder...

J'ai regardé du coté des requêtes filtrées sur une liste de valeur mais le problème c'est qu'il faut que le champ contienne exactement cette liste, hors vous l'avez compris, je veux un filtre contient.

Faut il envisager des parcours de requête et des ajouts si inexistant dans une table mémoire ?
Faut il passer par une rubrique différente (d'un champ texte avec des valeurs) ?

J espère être suffisamment clair pour que vous puissiez m'éclairer

bonne soirée
Miembro registrado
16 mensajes
Publicado el 24,mayo 2020 - 21:46
Bonsoir,

je ne sais pas quel système de SGBD tu utilises... Je ne connais que mySQL, et voilà comment je procède:

concernant ton architecture, ça pourrait fonctionner tel quel, mais l'index ne doit pas être très performant.
je comprend que tu as une seule table 'documents' qui contient une rubrique 'mots_clés'

il faudrait quelque chose qui ressemble (en mySQL) à ça:

SELECT
*
FROM
documents
WHERE
documents.mots_clés LIKE (%<un mot clé>%)


... mais une requête par mot clé, c'est un peu lourd et peu élégant... il faudrait regarder du coté de REGEXP (à vérifier...) pour tout faire en une seule requête peut-être...

De mon coté, je privilégie en général:
- 1 table 'documents' pour les documents
- 1 table 'mots' pour les mots clés
- 1 table 'liaison' (avec id_document et id_mot_cle en colonne, avec pour unicité un index id_document +id_mot_cle: une ligne = une association id document + id mot clé (unique)

et une requête du style:

SELECT
*
FROM
documents, liaison
WHERE
documents.id_document = liaison.id_document
AND liaison.id_mot_cle IN( <liste des mots clé sélectionnés>)


pour ton architecture, c'est un peu différent, il faut utiliser la fonction LIKE

Bon dev'

Grégoire
Miembro registrado
371 mensajes
Publicado el 24,mayo 2020 - 22:08
Bonsoir

Merci de ta reponse. Je suis en hfsql.
J ai bien un fichier mot mot-clé dans lequel je stock les mots clés. Je n avais pas pensé a lier le tout. Ca pourrait fonctionner mais j ai peur que ce soit lourd a gérer (modification, suppression de mots-clés).
Miembro registrado
371 mensajes
Publicado el 25,mayo 2020 - 13:13
D autres idée ?
Miembro registrado
4.362 mensajes
Publicado el 25,mayo 2020 - 13:55
Bonjour,
Un index Full text peut être : https://doc.pcsoft.fr/fr-FR/?3044375

--
Il y a peut être plus simple, mais, ça tourne
Miembro registrado
170 mensajes
Publicado el 25,mayo 2020 - 14:14
GB a écrit :
Bonsoir a tous,

... Ces mots clés sont stockés dans une rubrique texte et séparés par un RC. (dans la rubrique on a donc motclé1 RC motclé2 RC ....)...


Pourquoi avoir procédé de la sorte ?

Une table de liaison ne serait-elle pas plus judicieuse ?

--
Hth,
Padbrain
Miembro registrado
170 mensajes
Publicado el 25,mayo 2020 - 14:30
[Edit]

En stockant bien sur les mots clef dans une autre table puisqu'il semblerait qu'un mot clef puisse être affecté à plusieurs documents !

Table document(PK_id, libelle, ...)
Table mot_clef(PK_id, libelle)
Table mot_clef_affecte(FK_id_mot_clef, FK_id_document)

Du coup, la gestion des mots clef est simplifiée puisqu'il suffit d'ajouter ou de supprimer une liaison dans cette dernière table.

... Je veux voir les documents contenant le motclé1 ou/et le motclé2 ...

Et ceci est un OU, tu ne peux pas avoir les deux

--
Hth,
Padbrain
Miembro registrado
371 mensajes
Publicado el 25,mayo 2020 - 22:15
Voroltinquo a écrit :
Bonjour,
Un index Full text peut être : https://doc.pcsoft.fr/fr-FR/?3044375

--
Il y a peut être plus simple, mais, ça tourne


Réglé en 5 minutes ....

J'ai mis en place le full-text.
A savoir que pour ignorer le paramètre full texte dans une requete, il suffit de ne pas afficher le champs pertinence fulltext.

Merci beaucoup