2010-11-22 18 views
6

मेरे पास user और userFriend नामक 2 टेबल हैं। मैं उपयोगकर्ता तालिका से सभी उपयोगकर्ता, और उपयोगकर्ता प्रोफाइल तालिका से विशिष्ट सदस्य चाहता हूँ। तब मैं उन दोनों को शामिल करना चाहते हैं ...सशर्त बाएं कैसे लिखें

user 
userID userName 
1   aaa 
2   bbb 
3   ccc 
4   ddd 
5   eee 

userFriend 
userFriendID userID friendUserID 
1    1  2 
2    2  3 
3    1  4 
4    4  2 

तो मेरी userID = 1, तो मैं चाहता हूँ परिणाम अगर तरह

userID userName userFriendID friendUserID  
2   bbb  1   2 
3   ccc  NULL  NULL 
4   ddd  3   4 
5   eee  NULL  NULL 

तो इस तरह से मैं 2 टेबल के लिए सशर्त चाहते हैं, मैं बाएं जुड़ने का उपयोग करके केवल प्रथम तालिका के साथ उपयोगकर्ता आईडी = 1 वाली दूसरी तालिका में शामिल होना चाहते हैं।

+0

क्या आप अपना कोड थोड़ा बेहतर ले सकते हैं (फ़ॉर्मेटिंग सहायता का उपयोग करें)। इस समय ऐसा लगता है कि आपके पास userID, userFriendID और friendUserID है, जबकि मुझे विश्वास है कि आपको केवल दो आईडी की आवश्यकता है। – Gidon

+0

क्या आप अपना डाटामॉडल पोस्ट कर सकते हैं? मेरा मानना ​​है कि इस तरह के एक अनुरोध का तात्पर्य है कि वहां एक मुद्दा है। –

+0

देखें http://stackoverflow.com/questions/1255492/conditional-join-in-mysql – Singleton

उत्तर

0

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

SELECT DISTINCT userID FROM userFriend 
WHERE friendUserID = ? 

यह आपको उन सभी उपयोगकर्ताओं को देगा जो आपको आवश्यक विशिष्ट मित्र है। वैकल्पिक रूप से आप जोड़ सकते हैं एक अंदरूनी क्या नाम हैं देखने के लिए शामिल हों:

SELECT DISTINCT f.userID, u.name 
FROM userFriend f 
INNER JOIN users u ON u.userID = f.userID 
WHERE friendUserID = ? 

अद्यतन अपने संरचना के बारे में एक टिप्पणी। आपको userFriendID की आवश्यकता नहीं है। उपयोगकर्ता आईडी और मित्र आईडी का संयोजन आपकी कुंजी हो सकता है। क्वेरी

SELECT * FROM users u 
LEFT JOIN userFriend f on u.userID = f.userID 
WHERE f.friendUserID = ? 

की

अद्यतन यह आप हैं, वे दोस्त एक्स बाएं में शामिल होने के सभी उपयोगकर्ताओं वापस आ जाएगी इस क्वेरी में महत्वपूर्ण नहीं है। यह विशिष्ट स्थिति इसे अप्रासंगिक बना रही है।

वही पाने के लिए जो आपको चाहिए वह आपको निष्पादित करने की आवश्यकता है।

SELECT * FROM users u 
LEFT JOIN (
    SELECT DISTINCT * FROM userFriend f 
    WHERE friendID = 4 
) x ON u.id = x.userId 

यह एक सबक्वेरी का उपयोग किया जा सकता है, लेकिन मुझे लगता है कि अपने टेबल के आयोजन के सबसे तार्किक तरीका है न।

4

यह पूछने के लिए एक अपरंपरागत बात है ... लेकिन यह आपको वह परिणाम देता है जो आप चाहते हैं।

SELECT u.userID, u.userName, uf.userFriendID, uf.friendUserID 
FROM user u 
LEFT JOIN userFriend uf ON u.userID = uf.friendUserID AND uf.userID =1 
WHERE u.userID !=1 
संबंधित मुद्दे