2016-12-16 6 views
0

Работа с этим приложением, где мне нужно сделать запрос, который кажется невозможным (после нескольких часов пытается и пытается).Mysql как выбрать СУММ на основе другой таблицы таблицы

Хотя, я должен признать, я немного ржавый по запросам!

Во всяком случае, предположим, есть эти 3 таблицы:

Meal

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 

То, что я пытаюсь выбрать, - это еда, с kcal, 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% ккал food1 + 40 % ккал пища2
  • общая еда kj == 60% kj еда1 + 40% kj еда2
+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

Холли Ф, как ты? Кажется, это правильно! Иисус такой простой, БОЛЬШОЙ СПАСИБО –