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

गोपनीयता शर्त जांच के साथ एक प्रश्न के भीतर mysql क्वेरी

कृपया, इस क्वेरी को आजमाएं (SQL Fiddle पर भी ):

SELECT p.id, p.user_id, m.username, m.privacy,
       searcher.username "Searcher", p.status_msg
  FROM posts p
  JOIN members m ON m.id = p.user_id
  LEFT JOIN following f ON p.user_id = f.user_id
  JOIN members searcher ON searcher.username = 'userA'
 WHERE (m.privacy = 0 OR (m.privacy = 1 AND f.follower_id = searcher.id)
                      OR m.id = searcher.id)
   AND p.status_msg LIKE '%New%'
 ORDER BY p.id
 LIMIT 5;

मैंने username removed हटा दिया posts . से फ़ील्ड तालिका, क्योंकि यह बेमानी है। साथ ही, मैंने टेबल और कॉलम को थोड़ा अलग नाम दिया है, इसलिए क्वेरी को आपके स्कीमा के लिए कॉस्मेटिक बदलाव की आवश्यकता हो सकती है।

WHERE . में पहली पंक्ति क्लॉज वह है जिसे आप ढूंढ रहे हैं, यह निम्नलिखित क्रम में पदों का चयन करता है:

  1. बिना गोपनीयता के सदस्यों की पहली पोस्ट;
  2. फिर सदस्यों के पोस्ट जो वर्तमान searcher . द्वारा अनुसरण किए जाते हैं;
  3. आखिरकार, स्वयं सदस्य की पोस्ट।

संपादित करें:

यह क्वेरी मूल पहचानकर्ताओं का उपयोग कर रही है:

SELECT p.id, p.`userID`, m.username, m.privacy,
       searcher.username "Searcher", p.`statusMsg`
  FROM posts p
  JOIN `myMembers` m ON m.id = p.`userID`
  LEFT JOIN following f ON p.`userID` = f.user_id
  JOIN `myMembers` searcher ON searcher.username = 'userD'
 WHERE (m.privacy = 0 OR f.follower_id = searcher.id OR m.id = searcher.id)
   AND p.`statusMsg` LIKE '%New%'
 ORDER BY p.id
 LIMIT 5;

संपादित करें 2:

यदि उपयोगकर्ता के लिए posts . से कई अनुयायी हैं तो डुप्लिकेट से बचने के लिए तालिका, जुड़ने और फ़िल्टर करने की स्थितियों को निम्न तरीके से बदला जाना चाहिए (SQL Fiddle ):

SELECT p.id, p.user_id, m.username, m.privacy,
       searcher.username "Searcher", p.status_msg
  FROM posts p
  JOIN members m ON m.id = p.user_id
  JOIN members searcher ON searcher.username = 'userC'
  LEFT JOIN following f ON p.user_id = f.user_id
   AND follower_id = searcher.id
 WHERE (m.privacy = 0 OR (m.privacy = 1 AND f.id IS NOT NULL)
                      OR m.id = searcher.id)  
 ORDER BY p.id
 LIMIT 5;


  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.user' मौजूद नहीं है:त्रुटि

  2. MySQL ऑनलाइन डेटाबेस के साथ एंड्रॉइड ऐप कैसे काम करता है?

  3. MySQL एक ही टेबल पर एकाधिक शामिल हों?

  4. अजगर का उपयोग करके हाइव क्वेरी आउटपुट से छपी खाली लाइन को हटा दें

  5. मैं एक MySQL तालिका में एक यूनिकोड इलिप्सिस को सही ढंग से सम्मिलित करने के लिए SQLAlchemy कैसे प्राप्त करूं?