2016-12-16 41 views
0

在这个应用程序,我需要做一个查询似乎是不可能的(经过数小时的尝试和尝试)的工作。Mysql如何选择SUM基于列其他表

虽然,我不得不承认,我对查询有点生疏!

无论如何,让我们假设有这3个表:

膳食

id name 
-- ---- 
1 meal1 

食品

id name kcal kj 
-- ---- ---- -- 
1 food1 200 200 
2 food2 300 300 

Meal_food

m_id f_id percentage_food_in_meal 
---- ---- ---- 
1 1 0.60 
1 2 0.40 

我想要选择的是:一餐,与大卡,kj(和其他)属于这种餐基于的百分比。

正如我试过了,我已经试过了,但我可以告诉你最近的,我可以得到:

SELECT 
    m.*, 
    SUM(f.kj), -- <- should be based on the percentage 
    SUM(f.kcal) -- <- should be based on the percentage 
FROM 
    meal m, 
    meal_food mf, 
    food_nl f 
WHERE 
    m.id = mf.meal_id 
AND 
    f.id = mf.food_id 
GROUP BY 
    m.id; 

正如评论说:在基于百分比缺失。 尝试内部连接,外部连接,交叉连接,子查询,所以我想知道是否有可能。

希望我的问题关于我想要得到的是清楚的,如果不是,我会很乐意再试一次!

更新 例如作为输出:

id name kcal kj 
-- ---- ---- --- 
1 meal1 240 240 

澄清: meal1由2食品(配料):

  • 总膳食千卡== 60%千卡食物1 + 40 %kcal food2
  • 总膳食kj == 60%kj food1 + 40%kj food2
+1

我不知道你所说的“根据百分比”的意思。你能显示一些示例输出吗? – shmosel

+0

@shmosel我会更新 –

回答

1

未测试:

SELECT 
    m.id, MIN(m.name) AS meal_name, 
    SUM(f.kj*mf.percentage_food_in_meal), 
    SUM(f.kcal*percentage_food_in_meal) 
FROM meal m 
INNER JOIN meal_food mf 
ON m.id = mf.meal_id 
INNER JOIN food_nl f 
ON f.id = mf.food_id 
GROUP BY m.id; 
+0

冬青F,你是怎么做的?这似乎是正确的!耶稣如此简单,非常感谢 –