Salut,
Attention, je pense que ma demande ne va pas être super claire (comme le titre) et j'essaie de simplifier le cas qui est en réalité un peu plus complexe (plus de filtres, plus de champs...)
J'ai une liste de produits en vente enregistrée dans une base de données.
J'ai des ventes dans lesquelles on retrouve ces mêmes produits.
Je souhaite ressortir un tableau statistique contenant la quantité vendue cumulée et le total du chiffre d'affaire par produit. Ça, ça va, mais le problème arrive quand je veux également affichés les produits qui n'ont fait l'objet d'aucune vente.
Ma requête ressemble en gros à ça :
Si je supprime le WHERE document.created_date > "2015-10-10" pas de souci, j'ai l'ensemble de mes produits (grâce au RIGHT JOIN) , même ceux à 0, mais si je laisse cette requête comme ça je n'ai plus aucun résultat (en partant du principe de toutes les ventes sont antérieures à la date filtrée...)
Comment puis-je afficher les données des produits qui ne sont pas ce WHERE avec un ca (chiffre d'affaire) et une quantity à 0 par exemple ?
Je pourrais requêter l'ensemble de mes produits de ma table ast_products puis faire une boucle en itérant chacun de ces produits et ressortir les infos mais du coup je ne pourrais plus trier mes résultats en fonction du ca mais seulement en fonction d'un champ de la table ast_products.
Je pourrais également modifier ma précédente requête pour avoir un FROM (ast_products as product) pour récupérer l'ensemble des produits de cette table puis faire des JOIN liée à cette table mais je n'ai pas d'infos concernant les lignes de vente dans cette table de produits.
How can i do this complex request ?
Some help would be great
EDIT: j'ai aussi essayé d'utiliser les CASE WHEN THEN ELSE END de cette manière :
Mais du coup ça ne m'affiche plus les résultats qui ne sont pas dans la condition (uniquement les produits sans vente)
Modifié par MatthieuR (02 Oct 2015 - 13:38)
Attention, je pense que ma demande ne va pas être super claire (comme le titre) et j'essaie de simplifier le cas qui est en réalité un peu plus complexe (plus de filtres, plus de champs...)
J'ai une liste de produits en vente enregistrée dans une base de données.
J'ai des ventes dans lesquelles on retrouve ces mêmes produits.
Je souhaite ressortir un tableau statistique contenant la quantité vendue cumulée et le total du chiffre d'affaire par produit. Ça, ça va, mais le problème arrive quand je veux également affichés les produits qui n'ont fait l'objet d'aucune vente.
Ma requête ressemble en gros à ça :
SELECT
product.family_slug as family,
line.ast_prix_de_vente * line.ast_quantite as line_price,
document.ast_type_sale_document,
product.Name as Name,
product.Id as Id,
line.ast_prix_de_vente as unit_price,
SUM(line.ast_quantite) as quantity,
SUM(line.ast_prix_de_vente * line.ast_quantite) as ca
FROM (ast_sale_lines as line)
RIGHT JOIN ast_sale_documents as document ON document.Id = line.ast_sale_document
RIGHT JOIN ast_products as product ON product.Id = line.ast_produit
WHERE product.family_slug LIKE "%shop%"
AND document.created_date > "2015-10-10"
GROUP BY Name
ORDER BY ca desc
Si je supprime le WHERE document.created_date > "2015-10-10" pas de souci, j'ai l'ensemble de mes produits (grâce au RIGHT JOIN) , même ceux à 0, mais si je laisse cette requête comme ça je n'ai plus aucun résultat (en partant du principe de toutes les ventes sont antérieures à la date filtrée...)
Comment puis-je afficher les données des produits qui ne sont pas ce WHERE avec un ca (chiffre d'affaire) et une quantity à 0 par exemple ?
Je pourrais requêter l'ensemble de mes produits de ma table ast_products puis faire une boucle en itérant chacun de ces produits et ressortir les infos mais du coup je ne pourrais plus trier mes résultats en fonction du ca mais seulement en fonction d'un champ de la table ast_products.
Je pourrais également modifier ma précédente requête pour avoir un FROM (ast_products as product) pour récupérer l'ensemble des produits de cette table puis faire des JOIN liée à cette table mais je n'ai pas d'infos concernant les lignes de vente dans cette table de produits.
How can i do this complex request ?
Some help would be great
EDIT: j'ai aussi essayé d'utiliser les CASE WHEN THEN ELSE END de cette manière :
WHERE product.family_slug LIKE "%shop%" AND
CASE
WHEN line.ast_quantite > 0
THEN document.created_date > "2015-10-10"
ELSE 1
END
Mais du coup ça ne m'affiche plus les résultats qui ne sont pas dans la condition (uniquement les produits sans vente)
Modifié par MatthieuR (02 Oct 2015 - 13:38)