Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

पृथक्करण क्वेरी की डिग्री

यहां जॉइन का उपयोग करके चौड़ाई-प्रथम, सबसे छोटी पथ खोज का उपयोग करके खोज करने का तरीका बताया गया है। इस एल्गोरिथम में कोई जादू नहीं है, क्योंकि हम अपना उत्तर खोजने के लिए MySQL का उपयोग कर रहे हैं, और हम किसी भी प्रकार के अनुमान या अनुकूलन का उपयोग करने वाले किसी फैंसी खोज एल्गोरिथ्म को शामिल नहीं कर रहे हैं।

मेरे 'मित्र' तालिका में यूनिडायरेक्शनल संबंध हैं, इसलिए हमारे पास इस अर्थ में डुप्लीकेट हैं कि '1 से 2' और '2 से 1' दोनों संग्रहीत हैं। मैं is_active को भी बाहर कर रहा हूं क्योंकि कार्यान्वयन स्पष्ट होगा:

ये रहा डेटा:

member_id   friend_id
1           2
1           3
1           4
2           1
2           3
2           5
2           6
3           2
3           1
4           1
5           2
6           2
6           7
7           6
7           8
8           7

हमारे पास सदस्य 1 चुना गया है, और हम पूछ रहे हैं कि क्या 7 के साथ 1 मित्र है, किसी मित्र का मित्र, आदि? 0 की गिनती का मतलब है नहीं, और 1 की गिनती का मतलब हां है।

SELECT COUNT(*)
FROM friends f1
WHERE f1.member_id = 1
  AND f1.friend_id = 7

अगर नहीं, तो क्या वे किसी दोस्त के दोस्त हैं?

SELECT COUNT(*)
FROM friends f1
JOIN friends f2
  ON f2.member_id = f1.friend_id
WHERE f1.member_id = 1
  AND f2.friend_id = 7

अगर नहीं, तो दोस्त के दोस्त का दोस्त?

SELECT COUNT(*)
FROM friends f1
JOIN friends f2
  ON f2.member_id = f1.friend_id
JOIN friends f3
  ON f3.member_id = f2.friend_id
WHERE f1.member_id = 1
  AND f3.friend_id = 7

और इसी तरह...

तीसरी क्वेरी में '1 से 2', '2 से 6' और '6 से 7' का पथ मिलेगा, जो 1 की गिनती लौटाएगा।

प्रत्येक क्वेरी अधिक महंगी हो जाती है (बड़ी संख्या में जुड़ने के कारण), इसलिए आप किसी बिंदु पर खोज को सीमित करना चाह सकते हैं। एक अच्छी बात यह है कि यह खोज दोनों छोर से बीच की ओर काम करती है, जो कि सबसे छोटी पथ खोजों के लिए सुझाया गया एक सरल अनुकूलन है।

सदस्य 1 के लिए उन पारस्परिक मित्र अनुशंसाओं को खोजने का तरीका यहां दिया गया है:

SELECT f2.friend_id
FROM friends f1
JOIN friends f2
  ON f2.member_id = f1.friend_id
LEFT JOIN friends f3
  ON f3.member_id = f1.member_id
  AND f3.friend_id = f2.friend_id
WHERE f1.member_id = 1
  AND f2.friend_id <> f1.member_id // Not ourself
  AND f3.friend_id IS NULL // Not already a friend


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Python3 mysqlclient-1.3.6 (उर्फ PyMySQL) उपयोग?

  2. MySQL InnoDB:`अपडेट के लिए` और `शेयर मोड में लॉक` के बीच अंतर

  3. jdbc ड्राइवर org.gjt.mm.mysql.Driver किसके लिए है?

  4. त्रुटि:आपके PHP इंस्टॉलेशन में MySQL एक्सटेंशन गायब है जो वर्डप्रेस के लिए आवश्यक है

  5. यदि कोई परिणाम नहीं हैं तो MySQL डिफ़ॉल्ट मान का चयन कर रहा है?