2012-03-29 17 views
7

मेरे पास 2 टेबल, उपयोगकर्ता और निम्न हैं। तालिका के बाद स्थिति नामक कॉलम होता है। मैं यह जानना चाहता हूं कि प्रत्येक उपयोगकर्ता ने स्थिति के आधार पर कितने समूह का अनुसरण किया है।mysql group_concat अंदर गिनती के साथ?

नीचे दी गई क्वेरी प्रत्येक उपयोगकर्ता के लिए प्रत्येक स्थिति प्रकार के लिए एक रिकॉर्ड देता है।

SELECT users.name as user_name, f.status, count(f.id) 
FROM users 
JOIN application_follows f ON f.user_id = users.id 
GROUP BY users.id, f.status 
ORDER BY users.id 

रिटर्न कुछ की तरह:

user_name  status  count 

mike   new   10 
mike   old   5 
tom   new   8 
tom   old   9 

लेकिन मैं और अधिक अनुकूल की तरह कुछ करना चाहते हैं:

user_name  status_count 

mike   new,10|old,5 
tom   new,8|old,9 

group_concat का उपयोग करने और गिनती लेकिन फ्लॉप काम करने की कोशिश की। कोई सुराग?

SELECT users.name, GROUP_CONCAT(CONCAT(f.status, ',', f.cnt) SEPARATOR '|') 
FROM users 
JOIN 
(SELECT user_id, status, count(id) AS cnt 
    FROM application_follows 
    GROUP BY user_id, status) f 
ON f.user_id = users.id 
GROUP BY users.id 

उत्तर

13

आप ग्रुप द्वारा दो बार उपयोग करने के लिए, (user_id, स्थिति) से इस प्रकार की गिनती concat में शामिल मेज से user_id पर तो पाने के लिए पर पहले की जरूरत है बनाई गई क्वेरी, जो केवल उपयोगकर्ता_नाम, स्थिति और गिनती का उपयोग कर रही है।

SELECT user_name, GROUP_CONCAT(CONCAT(status, ',', count) SEPARATOR '|') FROM users GROUP BY user_name ORDER BY user_name; 
+0

हे मैन धन्यवाद, यह चाल है ... –

0

मैं पूरी टेबल परिभाषाओं तो पता नहीं है मैं:

संबंधित मुद्दे