2016-04-01 20 views
0

Hi katılmak, ancak hata döndürür:SQL hatası - Bir Sorgu ile çalışıyorum

sorgu şuna benzer:

SELECT 
    cd.*, 
    MIN(tmp.date_added) AS date_start, 
    MAX(tmp.date_added) AS date_end, 
    COUNT(tmp.order_id) AS `orders`, 
    SUM(tmp.products) AS products, 
    SUM(tmp.tax)  AS tax, 
    SUM(tmp.total)  AS total 
FROM 
    (
    SELECT 
    o.order_id, 
    (
     SELECT SUM(op.quantity) 
     FROM `order_product` op 
     WHERE op.order_id = o.order_id 
     GROUP BY op.order_id 
    ) AS products, 
    (
     SELECT SUM(ot.value) 
     FROM `order_total` ot 
     WHERE ot.order_id = o.order_id AND ot.code = 'tax' 
     GROUP BY ot.order_id 
    ) AS tax, 
    o.total, 
    o.date_added 
    FROM `order` o 
    WHERE o.order_status_id > '0' 
     AND DATE(o.date_added) >= '2016-01-01' 
     AND DATE(o.date_added) <= '2016-04-01' 
    GROUP BY o.order_id 
) tmp 
GROUP BY WEEK(tmp.date_added), 
    (
    SELECT ROUND(sum(op.total)) AS total 
    FROM order_product op 
     JOIN order o ON o.order_id = op.order_id 
     JOIN product_to_category p2c ON op.product_id = p2c.product_id 
    WHERE o.date_added > '2016-01-01 00:00:00' 
     AND o.date_added < '2016-03-28 23:59:59' 
     AND o.order_status_id = 3 
     AND p2c.category_id = cd.category_id 
) AS total 
FROM category_description cd 
JOIN category c ON c.category_id = cd.category_id 
WHERE c.status=1 
AND cd.language_id=1 
ORDER BY cd.category_id ASC; 

Ama, bana bu hata veriyor:

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 total from category_description cd join category c on c.categ' at line 16

Birisi nasıl düzeltileceğini söyleyebilir, teşekkürler.

+0

Neden sadece total' olarak 'ROUND (sum (op.total)) kullanılmasın? Alt sorgu, hiçbir amaca hizmet etmez. –

+0

Sorgunuzu biçimlendirmeniz daha kolay okunacaksa yardımcı olabilir. –

+1

İlk bakışta bu bir sözdizimi sorunundan daha fazlası gibi görünüyor, sorgunuz mantıklı değil. Dış seçmeninizin iki FROM maddesi varmış gibi görünüyor. –

cevap

-1

sorgusu aşağıda deneyin:

SELECT cd.*, 
MIN(tmp.date_added) AS date_start, 
MAX(tmp.date_added) AS date_end, 
COUNT(tmp.order_id) AS `orders`, 
SUM(tmp.products) AS products, 
SUM(tmp.tax) AS tax, 
SUM(tmp.total) AS total, 
(SELECT o.order_id, (SELECT SUM(op.quantity) FROM `order_product` op 
WHERE op.order_id = o.order_id GROUP BY op.order_id) AS products, 
(SELECT SUM(ot.value) FROM `order_total` ot WHERE ot.order_id = o.order_id AND ot.code = 'tax' 
GROUP BY ot.order_id) AS tax, 
(SELECT o.total, o.date_added FROM `order` o 
WHERE o.order_status_id > '0' AND DATE(o.date_added) >= '2016-01-01' 
AND DATE(o.date_added) <= '2016-04-01' GROUP BY o.order_id,WEEK(tmp.date_added)) AS tmp, 
(select ROUND(sum(op.total)) as total from order_product op 
join order o on o.order_id = op.order_id 
join product_to_category p2c on op.product_id = p2c.product_id 
where o.date_added > '2016-01-01 00:00:00' 
and o.date_added < '2016-03-28 23:59:59' 
and o.order_status_id = 3 
and p2c.category_id = cd.category_id) as total 
from category_description cd join category c on c.category_id = cd.category_id 
where c.status=1 and cd.language_id=1 order by cd.category_id asc 
+0

SQL sözdiziminizde bir hata var; 'GROUP BY WEEK (tmp.date_added), (ROUND (toplam (op.total)) satırını, satır 14'te bulunan toplam siparişe göre kullanmak için doğru sözdizimi için MySQL sunucu sürümünüze karşılık gelen kılavuzu kontrol edin – TheFermat