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 में थोड़ा सा फ़ील्ड इंडेक्स करें

  2. मैं एक कॉलम कैसे जोड़ सकता हूं जो उसी तालिका में किसी अन्य कॉलम पर बढ़ता है?

  3. MySQL सर्वर डेटाबेस के साथ SQLite क्लाइंट डेटाबेस को सिंक्रोनाइज़ करना

  4. ग्रहण - टेबल से जेपीए इकाइयां, सूचीबद्ध कोई स्कीमा नहीं

  5. डेटाटेबल को कस्टम PSObject में कनवर्ट/प्रोसेस करने का सबसे तेज़ तरीका