Jump to content

La Catégorie Préférée D'un Client


Recommended Posts

Bonjour,
 
Je cherche la requete SQL qui permet de déterminer la catégorie préférée d'un client.
 
C'est à dire, dans quelle catégorie de 1er niveau il a dépensé le plus d'argent.
 
J'ai déjà une piste avec requete qui me permet de trouver la sous-categorie dans laquelle il a le plus dépensé (basé sur prix des articles, pas sur le prix réellement payé mais c'est déjà pas mal. :ph34r: ) en partant des commandes livrées.

SELECT o.`id_order`,o.`id_customer`,o.`current_state`, SUM(od.product_price)as total,p.id_category_default as categorie
		FROM `prstshp_orders` o 
		JOIN prstshp_order_detail od ON od.`id_order`=o.`id_order` 
		JOIN prstshp_product p ON p.`id_product`=od.`product_id` 
		WHERE (o.`id_customer`=:id_customer)  and o.current_state=5
		GROUP BY p.id_category_default
		ORDER BY total desc
		LIMIT 1

Ou alors en 2 requetes ...

 

PS : categorie de premier niveau signifie : dont l'id_parent est 1.

 

Merci

Edited by BonCev (see edit history)
Link to comment
Share on other sites

Je comprends pas bien le truc. ID_PARENT est un ID_CATEGORY non ?

Donc si la catégorie 1 c'est les carottes, Ca revient à chercher les achats des clients dont la catégorie juste au dessus est les carottes.

 

Je me trompe peut-être mais je ne suis pas sûr que vous ayez bien saisi la signification de ID_PARENT dans la table category.

 

Quand je regarde la table category, j'ai l'impression que les catégories de premier niveau sont celles dont l'id_parent est 0.

Cela revient à sommer les achats par client par ensemble de sous-catégories ayant un id_parent commun et dont cet id_parent est un id_category ayant un id_parent à 0.

Dit autrement et dans l'autre sens, prendre tous les id_category ayant un id_parent à 0 et aller chercher toutes les ventes des catégories dont l'id_parent est cet id_category et y filtrer par client.

 

C'est peut-être faisable en une requête ou deux mais il faut à mon sens déjà défricher ça.

Edited by franckm1000 (see edit history)
Link to comment
Share on other sites

Bonjour franck merci pour ta participation a ce petit casse tête.  :)

 

Si j'ai bien saisi.

 

"Ca revient à chercher les achats des clients dont la catégorie juste au dessus est les carottes."

 

Oui ou alors plusieurs niveaux au dessus car il a des categories à 4 niveaux...

Edited by BonCev (see edit history)
Link to comment
Share on other sites

J'insiste mais vous confondez ID_PARENT 1 et 0

 

ID_PARENT = 1 représente une catégorie comme une autre et pas forcément une catégorie de premier niveau.

Par contre, les catégories dont l'ID_PARENT = 0 sont l'ensemble des catégories de premier niveau.

SELECT * from ps_category where id_parent =1

Renverra les catégories en dessous de la catégorie 1 (qui elle-même peut être une catégorie de second niveau).

select id_category from ps_category where id_parent = 0

renverra l'ensemble des catégories de premier niveau (celles qui vous intéressent  non ?)

Edited by franckm1000 (see edit history)
Link to comment
Share on other sites

alors allez savoir pourquoi mais la bdd à bien 0 en categ la plus haute puis a une sous categ 99 qui a une sous categ 1 qui dispose des categ que je recherche...

(Ce n'est pas moi qui ai créé le site au début.)

 

288772bddcat.png

 

 

Imaginons que j'ai deux catégories de premier niveau Pommes et Carottes (dont l'id parent est 1) et la depense du client dans leur sous-categorie

 

 

Pommes

 

- Origine France

-- ori france rouge 60€

-- ori france verte 50€

-Origine autre

-- ...

-- ...

 

 

Carottes

- Carottes Origine France

-- ori france orange 100 €

-- ori france jaune 0 €

- Carottes Origine autre

-- ...

-- ...

 

Je souhaite que la requete me retourne l'ID de catégorie Pommes car il dépenser 110€ dans cette catégorie.

 

Merci.

Edited by BonCev (see edit history)
Link to comment
Share on other sites

J'insiste mais vous confondez ID_PARENT 1 et 0

 

ID_PARENT = 1 représente une catégorie comme une autre et pas forcément une catégorie de premier niveau.

Bonjour, ce sont bien les catégories dont id_parent = 1 qui m’intéressent.

Cela ne change pas grand chose à la difficulté de la requête je crois, disons que chez moi le "premier niveau" ou niveau dont j'ai besoin est sous le 1.

 

J'aimerai que ma requête détermine pour tel client (j'ai l'id_customer) la catégorie qu'il préfère.

Merci

Edited by BonCev (see edit history)
Link to comment
Share on other sites

A tout hasard (note: pour la somme, j'ai fait product_price*product_quantity car mon intuition me dit que le prix est unitaire...)

  SELECT cu.id_parent,o.id_order,o.id_customer,o.current_state, SUM(od.product_price*od.product_quantity)as total,p.id_category_default as categorie
		FROM prstshp_orders o 
		JOIN prstshp_order_detail od ON od.id_order=o.id_order 
		JOIN prstshp_product p ON p.id_product=od.product_id
    JOIN prstshp_category cu ON p.id_category_default=cu.id_category
		WHERE  o.current_state=5
    and cu.id_parent=1
		GROUP BY cu.id_parent
		ORDER BY total desc
		LIMIT 1;
Edited by franckm1000 (see edit history)
Link to comment
Share on other sites

 

A tout hasard (note: pour la somme, j'ai fait product_price*product_quantity car mon intuition me dit que le prix est unitaire...)

  SELECT cu.id_parent,o.id_order,o.id_customer,o.current_state, SUM(od.product_price*od.product_quantity)as total,p.id_category_default as categorie
		FROM prstshp_orders o 
		JOIN prstshp_order_detail od ON od.id_order=o.id_order 
		JOIN prstshp_product p ON p.id_product=od.product_id
    JOIN prstshp_category cu ON p.id_category_default=cu.id_category
		WHERE  o.current_state=5
    and cu.id_parent=1
		GROUP BY cu.id_parent
		ORDER BY total desc
		LIMIT 1;

oui le prix est unitaire.

 

La requête n'est pas bonne, il devrait y avoir un "where id_customer=12068" par exemple, car il faut déterminer la catégorie préférée d'un client.

De plus tous les porduits ne sont pas dans une categorie qui ont un id_parent "direct" = 1, par exemple le  produit qui est en categorie_defaut 102 a un id_parent 160 , puis la categorie 160 a l'id-parent =1...  c'est vraiment dur.

Edited by BonCev (see edit history)
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...