2016-04-07 10 views
1

ilişkili değerlerin toplamını toplamak:MySQL: <code>database</code> yılında Üç tablo var

Tablo: makale

id | code | name   | quantity | stock_date 
-------------------------------------------------- 
1 1dfod Article name 10  2016-04-01 

Tablo:

id | client_id | selling_type_id | selling_date | selling_status 
---------------------------------------------------------------- 
1 1   1     2016-04-02  1 
2 1   1     2016-04-03  1 
3 1   1     2016-04-04  1 

Tablo satan: selling_detail

id | selling_id | article_id | quantity 
------------------------------------- 
1 1   1   2 
2 1   1   3 
3 1   1   1 
4 2   1   3 
5 3   1   1 
sonunda böyle bu makale için stock record olurdu: Bildiğim kadarıyla

date  | in_stock (item in stock) | out_stock (sum of item sold) 
---------------------------------------------------------------------- 
2016-04-01 10       0 
2016-04-02 0       6 
2016-04-03 0       3 
2016-04-04 0       1 

Tüm mysql sorgular bana bu sonucu vermez.

SELECT SUM(sd.quantity) out_stock, s.search_date, ifnull(ss.quantity, 0) in_stock 
FROM selling_detail sd JOIN selling s ON (sd.selling_id = s.id) 
LEFT JOIN shop_stock ss ON (ss.search_date = s.search_date) WHERE (sd.shop_stock_id = 1) 
GROUP BY s.search_date; 
+3

Eh, en azından ben OP yapmıştır çünkü konu dışı diye bu soruyu kapatmak için oy vereceğim – Strawberry

+0

bize en iyi çaba göstermek Sorunu kendi başına çözme çabası. ' –

cevap

1
SELECT date,SUM(in_stock) in_stock,SUM(out_stock) out_stock FROM 
(
SELECT stock_date date,quantity in_stock,0 out_stock FROM article 
    UNION 
SELECT selling_date,0,quantity FROM selling JOIN selling_detail ON selling_detail.selling_id = selling.id 
) x 
GROUP BY date; 
+0

Teşekkür ederim, tamamen iyi çalışıyor! – nekiala

+0

Burada bir UNION ALL kullanın çünkü herhangi bir dupes olmayacak ve bir operasyon kaydediyorsunuz. Ayrıca, geçici bellek kullanımının daha küçük olacağı ümidiyle SUM'ları alt sorguların içine koydum. – Arth

0

Eğer iki çok farklı tablolardan benzer verileri birleştirmek için çalışıyoruz olarak, muhtemelen bir UNION ALL namlusuna bakıyor olacaksınız:

İşte benim kodudur. Size almalısınız bu doğrultuda

şey başlatan:

 SELECT * 
     FROM (
     SELECT a.stock_date `date`, 
       SUM(a.quantity) `in_stock (item in stock)`, 
       0 `out_stock (sum of item sold)` 
      FROM article a 
      WHERE a.id = :article_id 
     GROUP BY `date`   
     UNION ALL 
     SELECT s.selling_date, 
       0,  
       SUM(sd.quantity) 
      FROM selling s 
      JOIN selling_detail sd 
      ON sd.selling_id = s.id 
      AND sd.article_id = :article_id 
     /* WHERE s.selling_type = ?? 
      AND s.selling_status = ?? /* If necessary */ 
     GROUP BY `date`   
      ) sr 
    ORDER BY `date` 
+0

Merhaba, Cevabınız için teşekkür ederiz. Ancak, somes hatalarım var. – nekiala

+0

Görüyorum ki bir çözüm buldunuz ama gelecekte lütfen hataların ne olduğunu açıklayınız. – Arth

İlgili konular