Поиск рецептов в PHP / MySQL, который позволяет фильтровать по ингредиентам - PullRequest
0 голосов
/ 22 сентября 2011

У меня есть база данных MySQL, которая выглядит так:

Recipes (rid, name)
Ingredients (iid, name)
Relationship (rid, iid)

И у меня есть интерфейсная веб-страница, которая отображает ингредиенты в сетке. Когда пользователь нажимает на первый ингредиент, возвращаются все рецепты, содержащие этот ингредиент.

При втором щелчке рецепты фильтруются, чтобы включить только первый ингредиент, а этот новый. При третьем щелчке применяется та же система фильтров.

Представьте себе следующий сценарий (хотя база данных выглядит не так, как показано ниже)

Рецепты (1,2,3,4,5,6) и ингредиенты (A, B, C, D, E, F)

1 A B C

2 C D F

3 A B E

4 A D E

5 B C E

6 D E F

Первый щелчок: (A) возвращает -> 1, 3, 4

Второй клик: (B) возвращает -> 1, 3

Третий щелчок: (C) возвращает -> 1

Как бы я это сделал, используя PHP и MySQL?

Ответы [ 2 ]

1 голос
/ 30 сентября 2011
SELECT re.* 
FROM recipes re
WHERE 
(
      SELECT COUNT(1) 
      FROM relationships sh 
      WHERE 
            sh.rid = re.rid 
            AND sh.iid IN (A, B, C)
) >= 3

Это решение работает для меня.Однако природа приложения, которое я разрабатываю, требует, чтобы сотни, если не тысячи рецептов были сохранены, чтобы оно работало нормально, т.е.без возврата нулевого результата.Довольно простая концепция, но сложно понять, как правильно.

0 голосов
/ 22 сентября 2011

Это довольно просто, вам нужно вернуть rid, где rid in (list of rids in relations where iid= given iid).

...