Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Database Resep, cari berdasarkan bahan

Karena resep dapat menggunakan beberapa bahan dan Anda mencari resep yang menggunakan satu atau lebih bahan yang ditentukan, Anda harus menggunakan DISTINCT kata kunci untuk mencegah hasil duplikat di mana resep menggunakan lebih dari satu bahan dari daftar yang ditentukan. Anda juga dapat menggunakan IN klausa untuk memfilter beberapa ID bahan.

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);

Atau, jika Anda mencari resep yang menggunakan semua bahan yang ditentukan dalam daftar, Anda dapat mengelompokkan hasilnya berdasarkan nama resep dan memeriksa apakah jumlah catatannya sama dengan jumlah bahan dalam daftar Anda.

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

Ini dengan asumsi bahwa tidak akan ada catatan duplikat dengan tupel (recipe_id, ingredients_id) yang sama (lebih baik dipastikan dengan batasan UNIK).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tabel pembaruan PDO menggunakan array

  2. tidak dapat terhubung ke buruh pelabuhan mysql dari lokal

  3. Cetak kueri aktual yang dijalankan MySQLdb?

  4. Tidak dapat memasukkan array ke dalam database

  5. Tidak dapat memulai MySQL, port 3306 sibuk