Mysql
 sql >> база данни >  >> RDS >> Mysql

Проверка дали дадена рецепта съдържа съставка - MYSQL

Бих предложил да съхраните броя на съставките за рецептата в таблицата с рецепти, само за по-голяма ефективност (това ще направи заявката по-бърза, ако не се налага да изчислява тази информация всеки път). Това е денормализация, която е лоша за целостта на данните, но добра за производителността. Трябва да сте наясно, че това може да доведе до несъответствия в данните, ако рецептите се актуализират и не внимавате да се уверите, че номерът е актуализиран на всяко подходящо място. Предполагам, че сте направили това с новата колона, зададена като ing_count в таблицата с рецепти.

Уверете се, че сте избягали от стойностите в за NAME1, NAME2 и т.н., ако са предоставени чрез въвеждане от потребителя - в противен случай сте изложени на риск от 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

Ако не искате да съхранявате броя на рецептите, можете да направите нещо подобно:

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. Как да получите актуализации за известия на живо от mysql с помощта на websockets?

  2. Скрипт за проверка на състоянието на репликацията на MySQL

  3. CodeIgniter:Съхраняване на изображение в базата данни?

  4. Как мога да получа последно въведен идентификатор с помощта на Hibernate

  5. Как да напиша нулево безопасно сравнение <=> в чист SQL?