2015-03-22 2 views
0

Извините, если это странный вопрос или если он уже ответил на стек раньше ... Я просто не могу придумать способ объяснить, что я на самом деле пытаюсь сделать.Как я могу «добавить» содержимое разных таблиц SQL вместе?

В принципе, представьте, что у вас есть две таблицы SQL, содержащие два разных рецепта.

Таблица 1 содержит:

  • 2 картофелины
  • 1 морковь
  • 200 г муки

Таблица 2 содержит:

  • 1 картофель
  • 3 в.п. Lery палочки
  • 100 г муки

Таким образом, результатом этих двух добавляемых вместе таблиц будет:

  • 3 картофель
  • 1 морковь
  • 3 палочки сельдерея
  • 300 г муки

Как вы можете добавить эти таблицы вместе? Является ли сохранение этих данных в разных таблицах SQL хорошей идеей или плохим? Благодарим за другие/лучшие способы хранения данных.

Любая помощь будет оценена :)

(первый пост на SO, извините, если его ужасный вопрос)

ответ

2

Хранение этих вещей в 2-х таблиц является плохой идеей. Лучший дизайн БД будет

ingredients table 
----------------- 
id 
name 
... 


recipes table 
-------------- 
id 
name 
description 
... 


units table 
----------- 
id 
name 


recipes_ingredients table 
-------------------------- 
recipe_id 
ingredient_id 
amount_value 
amount_unit_id 

Затем, чтобы получить все ингредиенты конкретного рецепта вы можете сделать

select i.name, ri.amount_value, u.name 
from recipes r 
join recipes_ingredients ri on ri.recipe_id = r.id 
join units u on ri.amount_unit_id = u.id 
join ingredients i on ri.ingredient_id = i.id 
where r.name = 'Pizza' 

Если вы хотите получить только отдельные компоненты, то вы можете сгруппировать по

select i.name as ingredient, 
     sum(ri.amount_value) as total_amount, 
     u.name as unit 
from recipes r 
join recipes_ingredients ri on ri.recipe_id = r.id 
join units u on ri.amount_unit_id = u.id 
join ingredients i on ri.ingredient_id = i.id 
where r.name = 'Pizza' 
group by i.name, u.name 
+0

Спасибо человеку :) Итак, в этом случае, когда вы извлекаете общие значения всех ингредиентов, как выглядел бы запрос SELECT? –

+0

Обновленный ответ –

+0

Итак, я побежал запрос и это результат картофеля Грамм --- Морковь \t \t 1 Каждый --- ромштекс граммы --- Морковь Каждые --- Возвращаются дубликаты «морковки» ... как бы я собрал все эти ингредиенты вместе? –

Смежные вопросы