Jump to content

SQL : Quantité vendue par date


Recommended Posts

Bonjour,

 

j'ai réalisé une requête SQL pour calculer la quantité de chaque produits vendue par date (sans période précise).

 

Voici le code de la requête :

 

SELECT DATE_FORMAT(o.date_add, '%Y-%m-%d') date_cmde,
         od.product_id id_prod,
         od.product_reference Ref,
         (SUM(od.product_quantity) - SUM(od.product_quantity_return)) Qte_vendue
        
FROM bcc_orders o, bcc_order_detail od

WHERE o.current_state IN (2, 3, 4, 5, 12, 13, 14, 22)
    AND o.id_order = od.id_order
            
GROUP BY date_cmde, od.product_id
ORDER BY date_cmde DESC

 

Le résultat me semble correct mais pour certains produits il est différent du résultat fourni par Prestashop dans Stats > Détail produit > Sélection d'un produit pour voir ses ventes (également sans période précise).

Les statuts de commandes correspondent aux étatts suivants :

2 : Paiement accepté

3 : Préparation en cours

4 : En cours de livraison

5 : Livrée

12 : Paiement à distance accepté

13 : Autorisation acceptée par PayPal

14 : Commande complète

22 : Préparation en cours avec attente de pièces

 

Pouvez-vous m'indiquer si ma requête est correcte ?

Quelle est celle utilisée par Prestashop pour ce même calcul ?

Il y a certainement une différence dans le calcul mais je ne saisi pas où.

 

Merci.

Link to comment
Share on other sites

Bonjour,

 

Je dirais que la requête effectuée est celle-ci:

$sql = 'SELECT SUM(od.`product_quantity`) AS total
	FROM `bcc_order_detail` od
	LEFT JOIN `bcc_orders` o ON o.`id_order` = od.`id_order`
	WHERE od.`product_id` = '.(int)$id_product.'
	AND o.valid = 1;

J'ai retiré la partie gérant la période de date.

Link to comment
Share on other sites

Merci pour cette info, j'ai effectivement trouvé où se situe cette requête.

 

J'ai maintenant 2 questions que me viennent à l'esprit :

1 - Est-ce que cette requête tient compte des retours de produits ?

2 - Est-ce que o.valid regroupe tous les états de commande que j'ai mentionné ?

 

Merci pour vos réponses.

Link to comment
Share on other sites

A première vue, non, pour les retours produits. Puisque comme on peut le voir via votre requête, le nombre se situe dans une autre colonne et celle-ci n'est pas déduite de la principale.

 

Pour le o.valid, j'ai envie de dire que oui et en même temps de le nuancer. C'est surtout que la commande est dites "valide", car payée. [et statut qui suivent, si marqué comme payé dans leur configuration].

 

J'irais plus vite sur une jointure des états de commandes en sélectionnant ceux à "paid" = 1 , personnellement.

Link to comment
Share on other sites

Pour ceux qui seraient intéressés voici ma requête modifiée.

Elle est plus précise que celle de Prestashop (1.6.0.9) car elle tient compte des retours de marchandise et des statuts de commandes spécifiques (devis: statut 15 par exemple) qui n'influent pas sur le stock.

 

    SELECT DATE_FORMAT(o.date_add, '%Y-%m-%d') date_cmde,
             od.product_id id_prod,
             od.product_reference Ref,
             (SUM(od.product_quantity) - SUM(od.product_quantity_return)) Qte_vendue
            
    FROM ps_order_detail od LEFT JOIN ps_orders o ON o.id_order = od.id_order AND o.current_state IN (2, 3, 4, 5, 12, 13, 14, 22)
                
    GROUP BY date_cmde, od.product_id
    ORDER BY date_cmde DESC

 

A valider par la team PS si possible.

 

Merci

Link to comment
Share on other sites

Petite correction avec WHERE plutot que AND :

 

    SELECT DATE_FORMAT(o.date_add, '%Y-%m-%d') date_cmde,
             od.product_id id_prod,
             od.product_reference Ref,
             (SUM(od.product_quantity) - SUM(od.product_quantity_return)) Qte_vendue
            
    FROM bcc_order_detail od LEFT JOIN bcc_orders o ON o.id_order = od.id_order
    WHERE o.current_state IN (2, 3, 4, 5, 12, 13, 14, 22)
                
    GROUP BY date_cmde, od.product_id
    ORDER BY date_cmde DESC

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...