Jump to content

Requête SQL à propos des meilleurs ventes


Recommended Posts

Bonjour, Bonsoir,

Je bloque sur une requête que je n'arrive pas à coder car au dessus de mes capacités... Merci d'avance de votre aide.

J'aimerai avoir une requête SQL avec la référence des produits, son nom, sa quantité vendu et son prix d'achat hors taxe ceci sur une période donné. Ensuite j'ai la même requête mais avec un ordre par catégorie.

Je vous remercie d'avance de votre aide car je suis désespéré actuellement.

Brandon DIARD.

Link to comment
Share on other sites

22 hours ago, Eolia said:

C'est natif dans votre tableau de bord en fait^^

image.thumb.png.32799d5b11ed208e6848c21da03c1ed5.png

Merci beaucoup de votre réponse, cependant les statistiques affichés ne sont pas celles que je veux. Il me manque son prix d'achat hors taxe. J'entends par là, le coût hors taxe de ma matière première.

Je vous remercie d'avance de votre aide.

Brandon DIARD.

Edited by Diard Brandon
Ajout de la citation (see edit history)
Link to comment
Share on other sites

Ben ajoutez vos données à la requête existante dans le module dashproducts^^

		$products = Db::getInstance()->ExecuteS(
			'
					SELECT
						product_id,
						product_name,
						SUM(product_quantity) as total,
						p.price as price,
						pa.price as price_attribute,
						SUM(total_price_tax_excl / conversion_rate) as sales,
						SUM(product_quantity * purchase_supplier_price / conversion_rate) as expenses
					FROM `'._DB_PREFIX_.'orders` o
		LEFT JOIN `'._DB_PREFIX_.'order_detail` od ON o.id_order = od.id_order
		LEFT JOIN `'._DB_PREFIX_.'product` p ON p.id_product = product_id
		LEFT JOIN `'._DB_PREFIX_.'product_attribute` pa ON pa.id_product_attribute = od.product_attribute_id
		WHERE `invoice_date` BETWEEN "'.pSQL($date_from).' 00:00:00" AND "'.pSQL($date_to).' 23:59:59"
		AND valid = 1
		'.Shop::addSqlRestriction(false, 'o').'
		GROUP BY product_id, product_attribute_id
		ORDER BY total DESC
		LIMIT '.(int)Configuration::get('DASHPRODUCT_NBR_SHOW_BEST_SELLER', 10)
		);

 

  • Like 1
Link to comment
Share on other sites

  • 2 weeks later...
On 7/29/2021 at 3:44 PM, Eolia said:

Ben ajoutez vos données à la requête existante dans le module dashproducts^^

		$products = Db::getInstance()->ExecuteS(
			'
					SELECT
						product_id,
						product_name,
						SUM(product_quantity) as total,
						p.price as price,
						pa.price as price_attribute,
						SUM(total_price_tax_excl / conversion_rate) as sales,
						SUM(product_quantity * purchase_supplier_price / conversion_rate) as expenses
					FROM `'._DB_PREFIX_.'orders` o
		LEFT JOIN `'._DB_PREFIX_.'order_detail` od ON o.id_order = od.id_order
		LEFT JOIN `'._DB_PREFIX_.'product` p ON p.id_product = product_id
		LEFT JOIN `'._DB_PREFIX_.'product_attribute` pa ON pa.id_product_attribute = od.product_attribute_id
		WHERE `invoice_date` BETWEEN "'.pSQL($date_from).' 00:00:00" AND "'.pSQL($date_to).' 23:59:59"
		AND valid = 1
		'.Shop::addSqlRestriction(false, 'o').'
		GROUP BY product_id, product_attribute_id
		ORDER BY total DESC
		LIMIT '.(int)Configuration::get('DASHPRODUCT_NBR_SHOW_BEST_SELLER', 10)
		);

 

Je réponds avec un peu de retard (désolé !). Merci beaucoup, je vais arriver à faire quelque chose avec ça !

Link to comment
Share on other sites

  • 2 years later...

Bonjour à tous, je suis intéressé par ces meilleures ventes et stats. Je trouve, sauf erreur de ma part que celle affichée dans Statistiques / Meilleures ventes est plus complète.

La requête de ce module statsbestproducts est celle-ci
 

SELECT SQL_CALC_FOUND_ROWS p.reference, p.id_product, pl.name,
				ROUND(AVG(od.product_price / o.conversion_rate), 2) as avgPriceSold,
				IFNULL(stock.quantity, 0) as quantity,
				IFNULL(SUM(od.product_quantity), 0) AS totalQuantitySold,
				ROUND(IFNULL(IFNULL(SUM(od.product_quantity), 0) / (1 + LEAST(TO_DAYS('.$array_date_between[1].'), TO_DAYS(NOW())) - GREATEST(TO_DAYS('.$array_date_between[0].'), TO_DAYS(product_shop.date_add))), 0), 2) as averageQuantitySold,
				ROUND(IFNULL(SUM((od.product_price * od.product_quantity) / o.conversion_rate), 0), 2) AS totalPriceSold,
				(
					SELECT IFNULL(SUM(pv.counter), 0)
					FROM '._DB_PREFIX_.'page pa
					LEFT JOIN '._DB_PREFIX_.'page_viewed pv ON pa.id_page = pv.id_page
					LEFT JOIN '._DB_PREFIX_.'date_range dr ON pv.id_date_range = dr.id_date_range
					WHERE pa.id_object = p.id_product AND pa.id_page_type = '.(int)Page::getPageTypeByName('product').'
					AND dr.time_start BETWEEN '.$date_between.'
					AND dr.time_end BETWEEN '.$date_between.'
				) AS totalPageViewed,
				product_shop.active
				FROM '._DB_PREFIX_.'product p
				'.Shop::addSqlAssociation('product', 'p').'
				LEFT JOIN '._DB_PREFIX_.'product_lang pl ON (p.id_product = pl.id_product AND pl.id_lang = '.(int)$this->getLang().' '.Shop::addSqlRestrictionOnLang('pl').')
				LEFT JOIN '._DB_PREFIX_.'order_detail od ON od.product_id = p.id_product
				LEFT JOIN '._DB_PREFIX_.'orders o ON od.id_order = o.id_order
				'.Shop::addSqlRestriction(Shop::SHARE_ORDER, 'o').'
				'.Product::sqlStock('p', 0).'
				WHERE o.valid = 1
				AND o.invoice_date BETWEEN '.$date_between.'
				GROUP BY od.product_id

 

Est-ce que vous auriez une idée de comment je pourrais rajouter à cette requête la date de la 1ère vente ainsi qu'également la date de la dernière ?

Merci par avance pour votre retour,

:)

Edited by Asu34 (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...