PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Recherche multicritères
Recherche multicritères
Iniciado por Esteban VENANT, 13,nov. 2019 14:12 - 5 respuestas
Miembro registrado
11 mensajes
Publicado el 13,noviembre 2019 - 14:12
Bonjour,

Je souhaite faire une fenêtre de recherche multicritères pour ma CRM mais je bloque sur certains points concernant la requête finale après sélection des critères de recherche.

Par exemple, je souhaite rechercher une société. J'ai donc une liste de critères de recherche possible qui apparait. Je sélectionne mon critère, ma condition (Commence par / égal / se termine par etc.) et je saisie ma valeur. J'ajoute ensuite autant de critères que je souhaite. Jusque là tout va bien.

Le problème c'est quand je veux sélectionner plusieurs fois le même critère pointant sur une table intermédiaire, je n'arrive pas à construire la requête. Voici un exemple, ça sera plus clair :

J'ai par exemple ma table société :
SOCcode / SOCnom
1 Soc1
2 Soc2
3 Soc3

Une table mots clés :
MCLEcode / MCLEnom
1 Mcle1
2 Mcle2
3 Mcle3

Et ma table intermédiaire Societe_MotsCles :
SOCcode / MCLEcode
1 1
1 2
1 3
2 1
3 2

Ici seule la Soc1 possède les 3 mots clés.

J'ai ensuite sur le même principe une table famille de produits :
FAMPcode / FAMPnom
1 Famille1
2 Famille2

et ma table intermédiaire Societe_FamilleProduit :
SOCcode / FAMPcode
1 1
1 2
2 1
2 2
3 1

Ici seules Soc1 et Soc2 possèdent les deux familles de produits



Je cherche par exemple à récupérer les sociétés qui possèdent à la fois les mots clés 1 2 et 3 ET les familles de produits 1 et 2. Donc ici dans l'exemple uniquement Soc1, mais impossible de construire la requête...

J'avais pensé à cette requête ci dessous mais l'union ne me donne pas le résultat attendu, l'Intersect aurait peut-être fait l'affaire mais windev ne l'accepte pas :

SELECT
Societe.SOCcode, COUNT(*) AS NB
FROM
Societe,
Societe_FamilleProduit
WHERE
Societe.SOCcode = Societe_FamilleProduit.SOCcode
AND Societe_FamilleProduit.FAMPcode IN ('1','2') GROUP BY Societe.SOCcode HAVING NB =2
UNION
SELECT
Societe.SOCcode, COUNT(*) AS NB
FROM
Societe,
MotsCles
WHERE
Societe.SOCcode = MotsCles.SOCcode
AND MotsCles.MCLEnom IN ('1','2','3') GROUP BY Societe.SOCcode HAVING NB =3


Dans cette requête je récupère Soc1 + Soc2 dans la première partie de la requête puis Soc1 dans la seconde partie, donc mon résultat final avec l'UNION me donne Soc1 et Soc2 alors que je souhaite récupérer uniquement Soc1.


J'espère avoir été le plus clair possible, je ne suis pas un spécialiste alors peut-être que la solution est évidente mais je n'arrive pas à la trouver malgré pas mal de recherche.

Merci d'avance

Cordialement
Mensaje modificado, 13,noviembre 2019 - 14:14
Miembro registrado
11 mensajes
Publicado el 13,noviembre 2019 - 14:22
Petites corrections de la requête ci-dessus que j'avais adapté pour correspondre à l'exemple :

SELECT
Societe.SOCcode, COUNT(*) AS NB
FROM
Societe,
Societe_FamilleProduit
WHERE
Societe.SOCcode = Societe_FamilleProduit.SOCcode
AND Societe_FamilleProduit.FAMPcode IN ('1','2') GROUP BY Societe.SOCcode HAVING NB =2
UNION
SELECT
Societe.SOCcode, COUNT(*) AS NB
FROM
Societe,
Societe_MotsCles
WHERE
Societe.SOCcode = Societe_MotsCles.SOCcode
AND Societe_MotsCles.MCLEcode IN ('1','2','3') GROUP BY Societe.SOCcode HAVING NB =3



Sorry du double post et merci à ceux qui pourront m'aider
Mensaje modificado, 13,noviembre 2019 - 14:25
Miembro registrado
2.682 mensajes
Publicado el 13,noviembre 2019 - 16:11
Quelque chose comme ça ne fonctionne pas ?

SELECT
Societe.SOCcode, COUNT(*) AS NB
FROM
Societe,
Societe_FamilleProduit,
Societe_MotsCles
WHERE
Societe.SOCcode = Societe_FamilleProduit.SOCcode
AND Societe.SOCcode = Societe_MotsCles.SOCcode
AND Societe_FamilleProduit.FAMPcode IN ('1','2') GROUP BY Societe.SOCcode HAVING NB =2
AND Societe_MotsCles.MCLEcode IN ('1','2','3')


--
Cordialement,

Philippe SAINT-BERTIN
Miembro registrado
326 mensajes
Publicado el 13,noviembre 2019 - 16:56
Bonjour;
Aller jeter un oeil sur les recherches et index full text.Il le fait bien
https://doc.pcsoft.fr/?3044375
Cordialement
Miembro registrado
11 mensajes
Publicado el 14,noviembre 2019 - 12:23
Philippe SB a écrit :
Quelque chose comme ça ne fonctionne pas ?

SELECT
Societe.SOCcode, Count(*) AS NB
FROM
Societe,
Societe_FamilleProduit,
Societe_MotsCles
where
Societe.SOCcode = Societe_FamilleProduit.SOCcode
AND Societe.SOCcode = Societe_MotsCles.SOCcode
AND Societe_FamilleProduit.FAMPcode IN ('1','2') GROUP by Societe.SOCcode HAVING NB =2
AND Societe_MotsCles.MCLEcode IN ('1','2','3')


--
Cordialement,

Philippe SAINT-BERTIN


Non car cela me donne les sociétés qui ont certes les deux familles de produits (1 et 2) mais qu'avec un seul mot clé parmi la liste (1, 2 ou 3) et non les 3 mots clés inclus. Dans l'exemple ci-dessus j'obtiens donc Soc1 et Soc2 avec cette requête alors que le résultat attendu est uniquement Soc1 (Fam produit 1+2 et Mots clés 1+2+3)

Ndiaga Toure, j'ai regardé mais je ne pense pas que cela résout ce problème ?


Cordialement
Miembro registrado
166 mensajes
Publicado el 14,noviembre 2019 - 20:30
Bonjour

SELECT SOCcode, COUNT(MCLEcode) AS toto
FROM Societe_MotsCles
GROUP BY SOCcode
HAVING toto = ( SELECT COUNT(MCLEcode) AS lolo FROM MotsCles)
AND SOCcode IN ( SELECT SOCcode FROM(
SELECT SOCcode , COUNT (FAMPcode) AS coco
FROM Societe_Famille
GROUP BY SOCcode
HAVING coco = ( SELECT COUNT (FAMPcode) AS fofo FROM Famille )))


Testée avec un petit jeu de données ça fonctionne.

Bon Dev