BonCev Posted January 8, 2016 Share Posted January 8, 2016 (edited) 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. ) 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 January 8, 2016 by BonCev (see edit history) Link to comment Share on other sites More sharing options...
franckm1000 Posted January 8, 2016 Share Posted January 8, 2016 (edited) 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 January 8, 2016 by franckm1000 (see edit history) Link to comment Share on other sites More sharing options...
BonCev Posted January 8, 2016 Author Share Posted January 8, 2016 (edited) 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 January 8, 2016 by BonCev (see edit history) Link to comment Share on other sites More sharing options...
BonCev Posted January 8, 2016 Author Share Posted January 8, 2016 (edited) . Edited January 8, 2016 by BonCev (see edit history) Link to comment Share on other sites More sharing options...
franckm1000 Posted January 8, 2016 Share Posted January 8, 2016 (edited) 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 January 8, 2016 by franckm1000 (see edit history) Link to comment Share on other sites More sharing options...
BonCev Posted January 8, 2016 Author Share Posted January 8, 2016 (edited) 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.) 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 January 11, 2016 by BonCev (see edit history) Link to comment Share on other sites More sharing options...
BonCev Posted January 11, 2016 Author Share Posted January 11, 2016 (edited) 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 January 11, 2016 by BonCev (see edit history) Link to comment Share on other sites More sharing options...
franckm1000 Posted January 11, 2016 Share Posted January 11, 2016 (edited) 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 January 11, 2016 by franckm1000 (see edit history) Link to comment Share on other sites More sharing options...
BonCev Posted January 11, 2016 Author Share Posted January 11, 2016 Merci, je teste ca cet apres midi Link to comment Share on other sites More sharing options...
BonCev Posted January 11, 2016 Author Share Posted January 11, 2016 (edited) 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 January 11, 2016 by BonCev (see edit history) Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now