2011-07-22 20 views
5
table a 
------------------------------------------------- 
id name  wishlist1 wishlist2  wishlist3 

1 john  1    2   3 
2 paul  4    5 


table b 
-------------------------------------------------- 
id goods 

1  car 
2  aircraft 
3  bicycle 
4  motorbike 
5  ipad 


result i want to get 
--------------------------------------------------- 
john car  aircraft bicycle 
paul motorbike ipad 

मुझे यह परिणाम कैसे प्राप्त हो सकता है? (mysql में)mysql समस्या में शामिल हों

+0

सभी उत्तर आपकी समस्या के लिए पर्याप्त हैं। अब शामिल हों आपसे स्पष्ट है ......! –

उत्तर

5

यह 3 इच्छाओं पर निर्भर आउटपुट

select 
    name, 
    g1.goods as wish1, 
    g2.goods as wish2, 
    g3.goods as wish3 
from tablea a 
left join tableb g1.id on g1.wishlist1 
left join tableb g2.id on g1.wishlist2 
left join tableb g3.id on g1.wishlist3 

(इच्छा कॉलम में nulls जब वे एक इच्छा की जरूरत नहीं है के साथ) 210

यह हालांकि बेहतर हो सकता है, और यह, neater यदि आप इच्छाओं की एक अल्पविराम से सीमित सूची कोई आपत्ति नहीं है:

select 
    name, 
    group_concat(goods) as wishes 
from tablea a 
left join tableb b on b.id in (a.wishlist1, a.wishlist2, a.wishlist3) 
group by name; 

जो होगा उत्पादन:

name | wishes 
------|---------------------- 
john | car,aircraft,bicycle 
paul | motorbike,ipad 
3

यह एक अच्छा डीबी डिज़ाइन नहीं है। इस तरह से आप सफलतापूर्वक मॉडल n रिश्ते के लिए कर रहा हूँ जाएगा में

table a_b 
----------- 
id_a int 
id_b int 

, ताकि यदि कोई उपयोगकर्ता अनेक विशलिस्ट्स में प्रदर्शित करने के लिए अपने इच्छा-सूची में कई तत्वों और एक तत्व हो सकते हैं:

आप की तरह एक intermadiary तालिका बनाना चाहिए

+0

मुझे लगता है कि आपने यह कोशिश नहीं की है ... – gbn

+0

@gbn - आप सही हैं - मैंने कोशिश नहीं की है - आपकी क्वेरी सही है - हालांकि, वह डीबी को फिर से डिजाइन करने के लिए सलाह को ध्यान में रख सकता है –

3
SELECT 
    a.name, 
    b1.goods, 
    b2.goods, 
    b3.goods 
FROM 
    a 
    LEFT JOIN 
    b AS b1 ON a.wishlist1 = b1.id 
    LEFT JOIN 
    b AS b2 ON a.wishlist2 = b2.id 
    LEFT JOIN 
    b AS b3 ON a.wishlist3 = b3.id 

आप तो हमेशा 3 इच्छासूची आइटम रखें, तो यह ठीक है। यदि आप इच्छासूची आइटमों की संख्या का विस्तार करना चाहते हैं, तो आप पंक्तियों के रूप में एक अलग तालिका और स्टोर के साथ बेहतर होंगे। First Normal Form

3

यह आमतौर पर एक बुरा विचार है। तब

person 
pid name 
--- ---- 
1 john 
2 paul 

good 
gid item 
--- --------- 
1 car 
2 aircraft 
3 bicycle 
4 motorbike 
5 ipad 

person_wants_good 
pid gid 
--- --- 
1 1 
1 2 
1 3 
2 4 
2 5 

, पाने के लिए परिणाम आप चाहते, निम्न क्वेरी का उपयोग:: मैं अपने टेबल इस प्रकार की संरचना का सुझाव देते हैं

name good 
---- --------- 
john car 
john aircraft 
john bicycle 
paul motorbike 
paul ipad 

:

SELECT p.name, g.good 
    FROM person_wants_good 
    JOIN person USING (pid) 
    JOIN good USING (gid) 

यह निम्न तालिका वापस आ जाएगी यह जानकारी आपके क्लाइंट कोड पर तब तक है जब यह जानकारी क्रॉस-टैबलेट तरीके से प्रस्तुत की जाती है।

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