2011-12-02 21 views
6

मैं MySQL का उपयोग कर रहा है और इस प्रकार दो डेटाबेस तालिकाओं है:मैं इसे MySQL के साथ कैसे कर सकता हूं?

उपयोगकर्ता

id username 
-------------- 
1 Bill 
2 Steve 

वस्तुओं

user_id key value 
---------------------- 
1   A  X 
1   B  Y 
1   C  Z 
2   A  S 
2   C  T 

क्या क्वेरी निम्न परिणाम का उत्पादन करने की आवश्यकता है?

username A B C 
------------------- 
Bill  X Y Z 
Steve  S  T 

मैं एक INNER JOIN के साथ इस कोशिश की, लेकिन 5 पंक्तियाँ (प्रत्येक इसी वस्तु पंक्ति के लिए एक) के साथ खत्म हो गया है।

किसी भी मदद की बहुत सराहना की।

+4

कॉल 'Pivot' क्वेरी –

+1

है http://stackoverflow.com/questions/6605604/mysql-pivot-query-results-with-group-by की [एक MySQL क्वेरी बारी पंक्तियों सकते – Benjam

+0

संभव डुप्लिकेट कॉलम में?] (http://stackoverflow.com/questions/4336985/can-a-mysql-query-turn-rows-into-columns) –

उत्तर

2
select u.username 
    , oA.value A 
    , oB.value B 
    , oC.value C 
    from users u 
left 
    join objects oA 
    on u.id = oA.user_id 
    and oA.key = 'A' 
left 
    join objects oB 
    on u.id = oB.user_id 
    and oB.key = 'B' 
left 
    join objects oC 
    on u.id = oC.user_id 
    and oC.key = 'C' 
इस
+0

इसे @ruakh चेतावनी भी चाहिए: यदि 'ए', 'बी' और 'सी' पहले से –

+0

ज्ञात हैं, तो यह पूरी तरह से काम करता है। यह पोस्ट की गई उप-क्वेरी विधि से भी तेज था। – gjb

3

तो 'A', 'B', और 'C' पहले से जाना जाता है, तो आप ऐसा कर सकते हैं:

SELECT users.username, 
     (SELECT objects.value 
      FROM objects 
      WHERE objects.user_id = users.id 
      AND objects.`key` = 'A' 
     ) AS a, 
     (SELECT objects.value 
      FROM objects 
      WHERE objects.user_id = users.id 
      AND objects.`key` = 'B' 
     ) AS b, 
     (SELECT objects.value 
      FROM objects 
      WHERE objects.user_id = users.id 
      AND objects.`key` = 'C' 
     ) AS c 
    FROM users 
ORDER 
    BY users.username 
; 
0

शायद इस क्वेरी है कि आप के लिए पूछ रहे हैं नहीं है, लेकिन यह एक स्वच्छ और sipmle क्वेरी मेरे पास है वह यह है कि आपकी स्थिति में प्रयोग किया जाता है:

select objects.*, matrix.* 
from 
     (select users.id, o.key 
      from users, (select distinct key from objects) as o 
     ) 
as matrix left join objects on matrix.id = objects.user_id 
          and matrix.key = objets.key 
order by matrix.id, matrix.key 

यह क्वेरी खाली रिक्त स्थान "भरती है"। तो आप परिणामों को दो नेस्टेड फोरैच (या जो भी समान) के साथ उपभोग कर सकते हैं और वांछित तालिका खींच सकते हैं।

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

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