2016-01-15 4 views
0

Я использую Prestashop 1.6.0.9, и я хочу получить из своей базы данных свои лучшие продукты в период с 01/01/2015 по 31/12/2015. Я написал запрос, но есть ошибка.Prestashop BestSelling Продукт SQL Query Snytax error

Вот мой запрос:

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' 

Вот сообщение об ошибке:

У Вас есть ошибка в вашем SQL синтаксиса; в руководстве, соответствует версии сервера MySQL для корректного синтаксиса использовать вблизи «) AS totalPageViewed, ps_product_shop.active ОТ ps_product р ЛЕВЫЙ» в строке 15

ответ

0

найти свои ответы сам :)

То есть был я нужен :)

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 
1

Среди многих ошибок в этом запросе , конкретный из них касается вашего использования МЕЖДУ.

Вы должны написать:

BETWEEN '01/01/2015' AND '31/12/2015' 

Вместо:

BETWEEN '01/01/2015 AND 31/12/2015' 

Также вы используете stock.quantity, но ничего не назвали "запас" в запросе.

+0

Я не комментировал логики только синтаксической ошибки. –