Prestashop 畅销产品 SQL 查询语法错误
Prestashop BestSelling Product SQL Query Snytax error
我正在使用 Prestashop 1.6.0.9,我想从我的数据库中检索我在日期 01/01/2015 和 31/12/2015 之间的最佳产品。我写了一个查询,但出现错误。
这是我的查询:
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('01/01/2015'), TO_DAYS(NOW())) - GREATEST(TO_DAYS('31/12/2015'), 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 ps_page pa
LEFT JOIN ps_page_viewed pv
ON pa.id_page = pv.id_page
LEFT JOIN ps_date_range dr
ON pv.id_date_range = dr.id_date_range
WHERE
pa.id_object = p.id_product
AND dr.time_start BETWEEN '01/01/2015 AND 31/12/2015'
AND dr.time_end BETWEEN '01/01/2015 AND 31/12/2015'
) AS totalPageViewed,
ps_product_shop.active
FROM ps_product p
LEFT JOIN ps_product_lang pl
ON (p.id_product = pl.id_product AND pl.id_lang = '3')
LEFT JOIN ps_order_detail od
ON od.product_id = p.id_product
LEFT JOIN ps_orders o
ON od.id_order = o.id_order
WHERE
o.valid = 1
AND o.invoice_date BETWEEN '01/01/2015 AND 31/12/2015'
GROUP BY od.product_id'
错误信息如下:
You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use
near ') AS totalPageViewed,
ps_product_shop.active
FROM ps_product p
LEFT ' at line 15
在此查询的许多错误中,确定的特定错误与您对 BETWEEN 的使用有关。
你应该写:
BETWEEN '01/01/2015' AND '31/12/2015'
而不是:
BETWEEN '01/01/2015 AND 31/12/2015'
您也使用了 stock.quantity
,但您的查询中没有名为 "stock" 的任何内容。
我自己找到答案:)
那是我需要它:)
SELECT P.id_product as SKU, PL.`name` as Product_Name, COUNT(OD.id_order) as ordered_qty,ROUND(AVG(OD.product_price / O.conversion_rate), 2) as avgPriceSold,P.`wholesale_price`,COUNT(OD.id_order)*P.`wholesale_price` as Satis_Whosale_carpimi,COUNT(OD.id_order)*ROUND(AVG(OD.product_price / O.conversion_rate), 2) as Toplam_satis FROM ps_product P
LEFT JOIN ps_product_lang PL ON P.id_product = PL.id_product
LEFT JOIN ps_order_detail OD ON P.id_product = OD.product_id
LEFT JOIN ps_orders O ON O.id_order = OD.id_order
WHERE O.valid = 1 AND PL.`id_lang`=1 AND O.invoice_date BETWEEN '2015-01-01 00:00:00' AND '2015-12-31 23:59:59'
GROUP BY P.reference, PL.`name`
ORDER BY ordered_qty DESC
我正在使用 Prestashop 1.6.0.9,我想从我的数据库中检索我在日期 01/01/2015 和 31/12/2015 之间的最佳产品。我写了一个查询,但出现错误。
这是我的查询:
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('01/01/2015'), TO_DAYS(NOW())) - GREATEST(TO_DAYS('31/12/2015'), 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 ps_page pa
LEFT JOIN ps_page_viewed pv
ON pa.id_page = pv.id_page
LEFT JOIN ps_date_range dr
ON pv.id_date_range = dr.id_date_range
WHERE
pa.id_object = p.id_product
AND dr.time_start BETWEEN '01/01/2015 AND 31/12/2015'
AND dr.time_end BETWEEN '01/01/2015 AND 31/12/2015'
) AS totalPageViewed,
ps_product_shop.active
FROM ps_product p
LEFT JOIN ps_product_lang pl
ON (p.id_product = pl.id_product AND pl.id_lang = '3')
LEFT JOIN ps_order_detail od
ON od.product_id = p.id_product
LEFT JOIN ps_orders o
ON od.id_order = o.id_order
WHERE
o.valid = 1
AND o.invoice_date BETWEEN '01/01/2015 AND 31/12/2015'
GROUP BY od.product_id'
错误信息如下:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') AS totalPageViewed, ps_product_shop.active FROM ps_product p LEFT ' at line 15
在此查询的许多错误中,确定的特定错误与您对 BETWEEN 的使用有关。
你应该写:
BETWEEN '01/01/2015' AND '31/12/2015'
而不是:
BETWEEN '01/01/2015 AND 31/12/2015'
您也使用了 stock.quantity
,但您的查询中没有名为 "stock" 的任何内容。
我自己找到答案:)
那是我需要它:)
SELECT P.id_product as SKU, PL.`name` as Product_Name, COUNT(OD.id_order) as ordered_qty,ROUND(AVG(OD.product_price / O.conversion_rate), 2) as avgPriceSold,P.`wholesale_price`,COUNT(OD.id_order)*P.`wholesale_price` as Satis_Whosale_carpimi,COUNT(OD.id_order)*ROUND(AVG(OD.product_price / O.conversion_rate), 2) as Toplam_satis FROM ps_product P
LEFT JOIN ps_product_lang PL ON P.id_product = PL.id_product
LEFT JOIN ps_order_detail OD ON P.id_product = OD.product_id
LEFT JOIN ps_orders O ON O.id_order = OD.id_order
WHERE O.valid = 1 AND PL.`id_lang`=1 AND O.invoice_date BETWEEN '2015-01-01 00:00:00' AND '2015-12-31 23:59:59'
GROUP BY P.reference, PL.`name`
ORDER BY ordered_qty DESC