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

बाईं ओर एक सीमा का उपयोग करके mysql . में शामिल हों

संपादन और टिप्पणी प्रतिक्रिया से, मुझे लगता है कि आप जिस प्रश्न की तलाश कर रहे हैं, वह यहां है... सबसे भीतरी पूर्व-प्रश्न को पोस्ट मिलते हैं और पोस्ट की शुरुआत किसने की, टिप्पणियां किसने कीं और किसने टिप्पणियां पोस्ट कीं। यह आंतरिक क्वेरी भी सबसे हाल की टिप्पणियों के साथ शीर्ष प्रति पोस्ट आईडी पर पूर्व-क्रमबद्ध है। उस के परिणाम का उपयोग करते हुए, मैं sql चर (@variables) में शामिल हो रहा हूं ताकि @varRow हर बार एक नई टिप्पणी में वृद्धि हो और हर बार एक पोस्ट आईडी में परिवर्तन होने पर 1 पर रीसेट हो जाए (इसलिए पोस्ट आईडी द्वारा आंतरिक प्रीक्वेरी ऑर्डर पहले ) अंत में, HAVING क्लॉज का उपयोग करके टिप्पणी की @varRow गिनती <6 प्रत्येक पोस्ट के अधिकतम 5 पर प्राप्त होगी।

यदि आप उन पोस्ट को सीमित करना चाहते हैं जिन्हें आप पुनर्प्राप्त करने का प्रयास कर रहे हैं, तो मैं INNER पर WHERE क्लॉज (जैसे दिनांक/समय यदि उपलब्ध हो) लागू करूंगा जो "प्रीक्वेरी" उत्पन्न करता है।

select straight_join
      PreQuery.*,
      @varRow := if( @LastPost = PreQuery.PostID, @varRow +1, 1 ) CommentRow,
      @LastPost := PreQuery.PostID PostID2
   from
      ( select
              posts.id PostID,
              posts.body,
              posts.CreatedAt,
              u1.id UserID,
              u1.DisplayName NameOfPoster,
              c.id,
              c.userid CommentUserID,
              c.text CommentText,
              u2.DisplayName CommentUserName
           from
              posts
                 join users u1
                    on posts.ownerUserID = u1.id

                 LEFT JOIN comments c
                    on posts.id = c.PostID

                    join users u2
                       on c.userid = u2.id 
            where
                  posts.id = TheOneParentIDYouWant
               OR posts.parentid = TheOneParentIDYouWant
            order by
               posts.ID,
               c.id desc ) PreQuery,

      (select @varRow := 0, @LastPost = 0 ) SQLVars

   having
      CommentRow < 6   

   order by
      PreQuery.postid,
      CommentRow

--- संपादित करें --- प्रति टिप्पणी मुझे लगता है कि आपका क्या मतलब है जिससे "पैरेंट पोस्ट" टिप्पणियां जुड़ी हुई हैं क्योंकि उनके पास सीधे पोस्ट आईडी है। चूंकि सबसे आंतरिक क्वेरी बोर्ड भर में सभी तत्वों/तालिकाओं को जोड़ती है, सभी सवारी के लिए साथ आ रहे हैं...

Post -> User (to get posting user name )
Post -> Comment (on Common Post ID -- left joined)
        Comment -> User ( to get commenting user name)

एक बार जब यह सब हो जाता है और सामान्य पोस्ट आईडी द्वारा क्रमबद्ध किया जाता है और सबसे हालिया टिप्पणी शीर्ष पर क्रमबद्ध होती है, तो मैं सभी लौटाई गई पंक्तियों के खिलाफ @vars लागू करता हूं। HAVING क्लॉज़ किसी भी टिप्पणी को हटा देगा जहाँ उसका क्रम उस 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. SQL का उपयोग करके डेटाबेस में दूषित MPTT ट्री (नेस्टेड सेट) की मरम्मत कैसे करें?

  2. डेल्टा-आयात डेटा एकत्र करता है लेकिन सोलर इंडेक्स को अपडेट नहीं करता है

  3. MySQL:जांचें कि क्या उपयोगकर्ता मौजूद है और इसे छोड़ दें

  4. mysql कनेक्टर/सी ++ में सेटब्लॉब का उपयोग करके बाइनरी डेटा सेट करें क्रैश का कारण बनता है

  5. MySQL:GROUP_CONCAT बाएं जॉइन के साथ