Aide - Recherche - Membres - Calendrier
Version complète : Select Distinct (marche pas :0( )
Forum Développeur - Administration serveur, programmation et base de données > Programmation > PHP
Cut Here
Bonjour à tous,

voilou j'ai a réaliser un moteur de recherche dans le cadre de mon projet tutoré.
La requete ci dessous recherche toutes les Opportunites à partir d'une catégorie recherchée.

Mais j'obtiens des doublons et je ne vois pas pourquoi, je dois surement mal utiliser l'attribut distinct.. j'ai cherché mais ce que j'essaie ne marche pas.


Ma base est constituée comme ceci :

Table opportunites_prospect
- id_op
- intitule_op
- id_c (id_c = l'id du client fictif)

Table attrib_prospect
- id_vendeur
- id_c

Table produit_op
- id_op
- id_prod

Table produits
- id_prod
- id_cat

(j'ai simplifié en ne gardant que les champs strictement nécessaire a la jointure)



Supposons maintenant que j'ai 2 catégories de produits :
Fruits (id_cat = 2)
Légumes (id_cat = 3)

Au niveau des produits, j'ai 3 fruits
Fraise
Framboise
Pomme

tous les 3 rattachés a la catégorie 2 (jusque la je pense ne pas avoir perdu trop de monde, j'espère icon_confused.gif )


Maintenant au niveau de mes opportunités (= 1 vente)
Opportunité 1 : Fraise
Opportunité 2 : Fraise + Framboise
Opportunité 1 : Pomme


Code

if($typ == "cat")
{

$req="
SELECT  DISTINCT produit_op.id_op, produit_op.id_prod, opportunites_prospect.*, attrib_prospect.*, produits.*
FROM opportunites_prospect, attrib_prospect, produit_op, produits
WHERE opportunites_prospect.id_vendeur = attrib_prospect.id_vendeur
AND attrib_prospect.id_com = 1
AND opportunites_prospect.id_op = produit_op.id_op
AND produit_op.id_prod = produits.id_prod
AND produits.id_cat = 2

}


En faisant cette requete j'obtiens 4 résultats au lieu de 3
Opportunité 1 : Fraise
Opportunité 2 : Fraise + Framboise
Opportunité 2 : Fraise + Framboise
Opportunité 1 : Pomme


Je vois bien d'ou vient le problème, la requete test fraise puis framboise (pour l'opportunité 2),
mais dès lors je voudrais juste obtenir une seule fois le résultat (en n'ayant comme id de test celui de l'opportunité (produit_op.id_op)

J'espère avoir été assez clair dans la présentation icon_redface.gif

Je ne comprends pas, je croyais que mon SELECT Distinct s'en occuperai. icon_neutral.gif


MERCI

++
Julien
Antoine
C'est sans doute que le reste n'est pas identique. Montre nous ce que MySQL te renvoie (tous les champs)
Cut Here
Oki je mets ça en piece jointe, je ne sais pas si cela va vous aider, j'espere.


Sur la capture,

id_p correspond à id_c (id du client)
id_com correspond à id_vendeur

voilou
Antoine
ton id_prod est différente. Fais une requete avec que les champs indentiques.
Cut Here
Heu au risque de passer pour un neuneu (je suis plus à ça près, j'apprend smile.gif )

comment ça mon id_prod est différente ?
Antoine
[attachmentid=2228]
Xav
C'est logique en fait, puisque dans ta table opportunités, tu as deux lignes pour l'id_op=5 (du fait que tu as deux produits sélectionnés pour une même opportunités).

C'est dans la normalisation de ta base que tu as un souci de conception:

- Ou tu prends l'option de créer deux opportunités quand tu vends 2 produits et, au moins, le résultat de ta requête sera correcte

- Ou tu crées un 'nouveau produit' qui est une combinaison des deux par exemple:
1-fraise
2-framboise
3-pomme
4-fraise+framboise

et là ta requête est sans doute bonne (je l'ai pas vérifiée car pour moi le problème ne se situe pas encore dedans)

++
Cut Here
Hum au début je me suis dis oui ya une grosse erreur mais en regardant, je ne comprends pas en quoi l'id_prod est différente, enfin je veux dire c'est voulu.

Pour l'opportunité (= la vente) 5 par exemple, j'ai 2 produits (id_prod = 4 et id_prod = 5). ce que je voudrais c'est lors du test, la vente numéro 5 n'apparaisse qu'une seule fois.

je ne sais pas si je suis plus clair, mais pour te répondre Antoine (sauf si c'est moi qui dit n'importe quoi, c'est fortement possible aussi smile.gif ), le fait que l'id_prod soit différente est tout à fait normale puisqu'une opportunité peut avoir plusieurs produits.
Xav
Cut Here (May 25 2005, 03:50 PM) a dit :
Pour l'opportunité (= la vente) 5 par exemple, j'ai 2 produits (id_prod = 4 et id_prod = 5). ce que je voudrais c'est lors du test, la vente numéro 5 n'apparaisse qu'une seule fois.


C'est ce que je te dis plus haut: ce n'est pas possible si tu veux afficher tes produits!! Ou alors, tu n'affiches que l'intitulé de ton opportunité, sans le détail des produits si tu veux conserver cette structure de base et tu kickes tes jointures avec ta table produits; tu pourras tjs afficher le détail juste après sur base de l'id_opp... mais pas en une seule requête, impossible!
Cut Here
Xav (May 25 2005, 02:45 PM) a dit :
C'est logique en fait, puisque dans ta table opportunités, tu as deux lignes pour l'id_op=5 (du fait que tu as deux produits sélectionnés pour une même opportunités).

C'est dans la normalisation de ta base que tu as un souci de conception:

- Ou tu prends l'option de créer deux opportunités quand tu vends 2 produits et, au moins, le résultat de ta requête sera correcte

- Ou tu crées un 'nouveau produit' qui est une combinaison des deux par exemple:
1-fraise
2-framboise
3-pomme
4-fraise+framboise

et là ta requête est sans doute bonne (je l'ai pas vérifiée car pour moi le problème ne se situe pas encore dedans)

++
*




J'ai répondu dans la foulée, désolé.

Le truc c'est que si je dois changer toute ma base, j'ai au niveau temps des impératifs et reprendre le code (y'en a pa mal) me gene bcp.

ma requete est bonne oui, juste que je voudrais éliminer le doublon de l'id_op
Cut Here
Je ne sais pas si c'est possible d'éditer le titre du sujet mais
SUJET RÉSOLU,

merci Antoine et Xav gourou.gif .

++
Julien
Antoine
De rien wink.gif
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'informations, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2009 Invision Power Services, Inc.