/ / SQL क्वेरी विभिन्न परिणामों के साथ - mysql

विभिन्न परिणामों के साथ एसक्यूएल क्वेरी - mysql

SELECT postID, threadID, COUNT(DISTINCT postID) as count
FROM wbb1_1_post post
LEFT JOIN wcf1_user_to_groups groups
ON post.userID = groups.userID
WHERE threadID IN (468)
AND groupID IN (4,10)
AND isDisabled != 1
AND isDeleted != 1
ORDER BY postID ASC

क्रिस = समूह 4

सेबस्टियन एस। = ग्रुपआईडी 10

परिणाम:

 postID  threadID  count
2811     468      2

सबकुछ सही है।

यहां छवि विवरण दर्ज करें

SELECT postID, threadID, COUNT(DISTINCT postID) as count
FROM wbb1_1_post post
LEFT JOIN wcf1_user_to_groups groups
ON post.userID = groups.userID
WHERE threadID IN (68)
AND groupID IN (7)
AND isDisabled != 1
AND isDeleted != 1
ORDER BY postID ASC

तालीश और शराबी = समूह-समूह ender

परिणाम:

postID  threadID    count
349 (wrong!) 68        3

परिणाम 308 होना चाहिए, क्योंकि मैं सबसे पुराना पद चाहता हूं (इसलिए मैं पोस्ट एएससी द्वारा आदेश देता हूं)। यहां छवि विवरण दर्ज करें क्या इस क्वेरी को ऑप्टिमाइज़ करने का कोई तरीका है?

उत्तर:

उत्तर № 1 के लिए 1

यह है क्योंकि mysql यह वास्तव में के साथ उदार हैकुल कार्य (COUNT, MIN ...) और समूहीकरण। बुरा हिस्सा: आप "यह कैसे समूहों के बारे में नियंत्रण नहीं मिला ... और आदेश द्वारा अपने मामले में समस्या को सही करने के लिए प्रतीत नहीं होता है।

अन्य DBMS (और ANSI SQL) आपको उन फ़ील्ड्स को समूहित करने के लिए मजबूर करते हैं जो "कुल कार्यों में टी नहीं करते हैं, जब आप एक का उपयोग करते हैं। उबाऊ लगता है, लेकिन" आप जानते हैं कि आपको क्या मिलता है "।

आपके मामले में, बस पोस्ट पर एमआईडी का उपयोग करें और थ्रेड द्वारा थ्रेड को चाल करना चाहिए।

SELECT MIN(postID), threadID, COUNT(*) as count
FROM wbb1_1_post post
LEFT JOIN wcf1_user_to_groups groups
ON post.userID = groups.userID
WHERE threadID IN (68)
AND groupID IN (7)
AND isDisabled != 1
AND isDeleted != 1
group by threadID

वैसे, आपके लेफ्टिनेंट जॉइन को कोई मतलब नहीं है (यदि मैं गलत नहीं हूं) तो आप एक बयान में अपनी ज्वाइन की गई इकाई का उपयोग करते हैं।

और यदि आपको केवल एक मूल्य रखना है तो IN का उपयोग करने की आवश्यकता नहीं है, लेकिन मुझे लगता है कि यह सिर्फ नमूना कोड है।

और उपयोग करने की कोई आवश्यकता नहीं है COUNT(distinct postID) एक सही ग्रुपिंग के साथ। महज प्रयोग करें COUNT(*)