PHP и MySQL & формы - гибкий поиск? (например: ингредиенты X могут составлять рецепты Y) - PullRequest
1 голос
/ 13 октября 2009

Я только начинаю с PHP / MySQL, поэтому, пожалуйста, простите за довольно простой вопрос:

В качестве практического примера я хочу создать небольшую базу рецептов. Каждый рецепт содержит X различных ингредиентов. Я думаю, что таблица достаточно проста - каждая строка представляет рецепт, а каждый столбец после первого (первичный ключ) - это ингредиент со значением ИСТИНА / ЛОЖЬ (нужен / не нужен).

Но как мне создать форму на основе флажков, которая может искать в этой таблице так, чтобы, если я проверял 5 различных ингредиентов (морковь, свинина, рис, масло, картофель), запрос возвращал все рецепты, которые я могу сделать только с этими 5 ингредиентов?

Так что рецепт, который использует эти 5 и что-то еще, НЕ БУДЕТ возвращен. Но рецепт, который использует только 4 из этих 5, БУДЕТ возвращен.

С моим ограниченным знанием, строка запроса, которую я представляю, кажется забита IF и ужасно громоздкой ... и это только для нескольких ингредиентов, что если бы у меня было более ста? Хлоп.

1 Ответ

5 голосов
/ 13 октября 2009

Вы должны оформить свой стол по-другому:

  • Рецепты - ID, Имя
  • Ингредиенты - ID, название
  • Состав рецептов - recipeID, ингридиентID, количество

    Recipes
    ID name
    1 scalloped potato
    2 cheesy carrots
    3 saucy potato
    
    Ingredients
    ID name
    1 potato
    2 sauce
    3 cheese
    4 carrots
    
    RecipesIngredients
    recipesID ingredientID    amount
    1          1               5 lbs
    1          2               2 cups
    1          3               1 cup
    2          3               1/2 cup
    2          4               2 whole
    3          2               a smidge
    3          1               1 whole red
    

Чтобы получить все рецепты с сыром и картофелем:

SELECT * from recipes r 
INNER JOIN RecipesIngredients ri on r.id=ri.recipeID
INNER JOIN Ingredients i on i.id = ri.ingredientID
WHERE i.name in ('cheese','potato')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...