2012-10-05 12 views
10

शायद मेरा प्रश्न इतना स्पष्ट नहीं है, कृपया मुझे समझाएं: मुझे सभी क्लाइंट नंबर/थोक व्यापारी संयोजन के साथ सभी उपयोगकर्ताओं की सूची प्राप्त करने की आवश्यकता है, हर ग्राहक 1 के लिए 4 विभिन्न ग्राहक संख्या/थोक व्यापारी कॉम्बोपंक्तियों से पंक्तियों से mysql आंतरिक जुड़ने के परिणामों को समूह में कैसे कॉल करें

है मेरी db में मैं 2 टेबल

USERS 
id | name 
--------- 
1 | a 
2 | b 

CLIENT_NUMBERS 
id | user_id | number | wholesaler 
---------------------------------- 
1 | 1  | ac1 | aw1 
2 | 1  | ac2 | aw2 
3 | 2  | bc1 | bw1 

है का उपयोग करते हुए एक सरल अंदरूनी मैं शामिल हों गया ग्राहक पंक्तियों को दोहराया गया है, प्रत्येक इसी ग्राहक संख्या/थोक व्यापारी के लिए एक

मैं इस क्वेरी में group_concat का उपयोग कर परिणाम तय करने के लिए प्रबंधित किया है: इतना अच्छा अब तक

SELECT a.id AS user_id, a.name AS Name 
GROUP_CONCAT(b.client_no, ', ', b.wholesaler SEPARATOR '; ') AS client_no_wholesaler 
FROM users AS a 
INNER JOIN client_numbers AS b ON a.id = b.user_id 
GROUP BY ID 

user_id | name | client_no_wholesaler 
-------------------------------------------- 
1  | a | ac1, aw1; ac2, aw2 
2  | b | bc1, bw1 

, लेकिन मैं तो अपने परिणाम इस तरह दिख सकता विभिन्न स्तंभों में ग्राहक संख्या/थोक व्यापारी संयोजन "विस्फोट" करने की जरूरत है :

user_id | name | client_no_wholesaler1 | client_no_wholesaler2 | ...up to 4 
---------------------------------------------------------------------------- 
1  | a | ac1, aw1    | ac2, aw2    | 
2  | b | bc1, bw1    |      | 

एक सरल PHP के साथ क्वेरी परिणाम प्राप्त करने के बाद ऐसा करने से विस्फोट के लिए एक विकल्प है क्योंकि मैं एक XLS फ़ाइल और उसके मेरी क्वेरी परिणाम स्तंभों पर आधारित है, किसी भी विचार की सराहना की होगी उत्पन्न करने के लिए एक वर्ग का उपयोग कर रहा है ।

उत्तर

5

जो आप चाहते हैं उसे आम तौर पर "pivot" कहा जाता है।

SELECT 
    a.id AS user_id, 
    a.name AS Name, 
    CONCAT(b1.client_no, ', ', b1.wholesaler) AS client_no_wholesaler1, 
    CONCAT(b2.client_no, ', ', b2.wholesaler) AS client_no_wholesaler2, 
    CONCAT(b3.client_no, ', ', b3.wholesaler) AS client_no_wholesaler3, 
    CONCAT(b4.client_no, ', ', b4.wholesaler) AS client_no_wholesaler4 
FROM users AS a 
JOIN client_numbers AS b1 ON b1.user_id = a.id 
LEFT JOIN client_numbers AS b2 ON b2.user_id = a.id and b2.id > b1.id 
LEFT JOIN client_numbers AS b3 ON b3.user_id = a.id and b3.id > b2.id 
LEFT JOIN client_numbers AS b4 ON b4.user_id = a.id and b4.id > b3.id 
GROUP BY 1, 2 

ध्यान दें कि अतिरिक्त मिलती डुप्लिकेट के लिए ON खंड में एक बढ़ती आईडी हालत के अलावा द्वारा मिलती है से बचने:

यहां आपके द्वारा किसी अतिरिक्त प्रत्येक अतिरिक्त स्तंभ के लिए शामिल होने का उपयोग कर एसक्यूएल में यह कोड है अतिरिक्त जुड़ता है। यदि आईडी उपयुक्त ऑर्डरिंग कॉलम नहीं है, तो जुड़ने को अलग करने के लिए कुछ और चुना है।

+0

"पिवट" मैंने आज कुछ नया सीखा है, बहुत बहुत धन्यवाद, आपकी क्वेरी काम करता है जैसा कि मुझे चाहिए – hey259

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