Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Baza przepisów, wyszukiwanie według składników

Ponieważ przepis może zawierać wiele składników, a szukasz przepisów, które wykorzystują jeden lub więcej określonych składników, powinieneś użyć DISTINCT słowo kluczowe, aby zapobiec duplikowaniu wyników, gdy przepis zawiera więcej niż jeden składnik z określonej listy. Możesz także użyć IN klauzula o filtrowaniu według wielu identyfikatorów składników.

select DISTINCT r.name
from 
    recipes r
    inner join ingredient_index i
    on i.recipe_id = r.recipe_id
where i.ingredient_id IN (7, 5);

Alternatywnie, jeśli szukasz przepisów, które wykorzystują wszystkie składniki wymienione na liście, możesz pogrupować wyniki według nazwy przepisu i sprawdzić, czy liczba rekordów jest taka sama jak liczba składników na liście.

select r.name
from 
    recipes r
    inner join ingredient_index i
    on i.recipe_id = r.recipe_id
where i.ingredient_id IN (7, 5)
GROUP BY r.name
HAVING COUNT(*) = 2

Jest to przy założeniu, że nie będzie zduplikowanych rekordów z tą samą krotką (recipe_id, component_id) (lepiej jest zapewnić ograniczenie UNIQUE).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Równoważenie obciążenia bazy danych w chmurze — MySQL Master Failover z ProxySQL 2.0:część pierwsza (wdrożenie)

  2. różnica między where_in i find_in_set

  3. Jak zapełnić bazę danych tylko raz przed metodami @Test w teście wiosennym?

  4. Jak mogę chronić się przed atakami typu SQL injection za pomocą DBI Perla?

  5. Korzystanie z MariaDB