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

Memeriksa apakah resep mengandung bahan - MYSQL

Saya sarankan menyimpan hitungan jumlah bahan untuk resep di tabel resep, hanya demi efisiensi (itu akan membuat kueri lebih cepat jika tidak harus menghitung informasi ini setiap saat). Ini adalah denormalisasi, yang buruk untuk integritas data tetapi bagus untuk kinerja. Anda harus menyadari bahwa ini dapat menyebabkan inkonsistensi data jika resep diperbarui dan Anda tidak berhati-hati untuk memastikan nomor diperbarui di setiap tempat yang relevan. Saya berasumsi Anda telah melakukan ini dengan set kolom baru sebagai ing_count di tabel resep.

Pastikan Anda keluar dari nilai untuk NAME1, NAME2, dll jika diberikan melalui input pengguna - jika tidak, Anda berisiko terkena injeksi SQL.

select recipe.rid, recipe.recipe_name, recipe.ing_count, count(ri) as ing_match_count
from recipe_ingredients ri 
inner join (select iid from ingredients where i.name='NAME1' or i.name='NAME2' or i.NAME='NAME3') ing
on ri.iid = ing.iid
inner join recipe 
on recipe.rid = ri.rid
group by recipe.rid, recipe.recipe_name, recipe.ing_count
having ing_match_count = recipe.ing_count

Jika Anda tidak ingin menyimpan jumlah resep, Anda dapat melakukan sesuatu seperti ini:

select recipe.rid, recipe.recipe_name, count(*) as ing_count, count(ing.iid) as ing_match_count
from recipe_ingredients ri 
inner join (select iid from ingredients where i.name='NAME1' or i.name='NAME2' or i.NAME='NAME3') ing
on ri.iid = ing.iid
right outer join recipe 
on recipe.rid = ri.rid
group by recipe.rid, recipe.recipe_name
having ing_match_count = ing_count


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. bermigrasi ke mysql di Django

  2. MySQL:Kesalahan SQL:1140, SQLState:42000

  3. masukkan output print_r ke database?

  4. MySQL - Kontrol baris mana yang dikembalikan oleh grup oleh

  5. Apakah mungkin membuat kolom dengan default UNIX_TIMESTAMP di MySQL?