2010-05-10 11 views
8

मेरा MySQL टेबल संरचना इस तरह है।एसक्यूएल उपयोगकर्ता के दोस्तों और दोस्तों के दोस्तों को पाने के लिए

USER 
int id 
varchar username 

FRIEND_LIST 
int user_id 
int friend_id 

प्रत्येक मित्र संबंध के लिए मैं एफआरआई में 2 रिकॉर्ड डालता हूं END_LIST। उपयोगकर्ता 1 उपयोगकर्ता 2 के दोस्त तो अगले पंक्तियों FRIEND_LIST

1,2 
2,1 

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

चयन कॉलम ए, बी, सी वापस करना चाहिए।

a: user_id 
b: friend_id 
c: username (username of friend_id) 

If 1 is friend of 2 and 3. 
2 is friend of 3, 4 and 5 
3 is friend of 5,6,7 

फिर क्वेरी मिल 1 के दोस्तों और दोस्तों के दोस्तों में से लौटना चाहिए करने के लिए:

1 2 two 
1 3 three 
2 1 one 
2 3 three 
2 4 four 
2 5 five 
3 1 one 
3 5 five 
3 6 six 
3 7 seven 

मैं किसी एक क्वेरी के साथ इस पंक्तियों मिल सकता है?

अद्यतन उत्तर: मैंने डीवीके के उत्तर को थोड़ा सा संशोधित किया और यह वह प्रश्न है जो मैं देख रहा था।

SELECT friends.user_id, friends.friend_id, username 

FROM 
     FRIEND_LIST friends, USER 

WHERE 
     CAT_USER.id = friends.friend_id 
AND 
     friends.user_id = 1 

UNION 

SELECT 
     fof.user_id, fof.friend_id, username 
FROM 
     FRIEND_LIST friends, FRIEND_LIST fof, USER 
WHERE 
     USER.id = fof.friend_id 
AND 
     friends.friend_id = fof.user_id 
AND 
     friends.user_id = 1; 

उत्तर

1

यह कम कुशल लेकिन पठनीय है:

SELECT friends.user_id, friends.friend_id, username 
FROM FRIEND_LIST friends, USER 
WHERE USER.id   = friends.friend_id 
AND USER.id = 1 
UNION 

SELECT USER.user_id, fof.friend_id, username 
FROM FRIEND_LIST friends, FRIEND_LIST fof, USER 
WHERE USER.id   = fof.friend_id 
AND friends.friend_id = fof.user_id 
AND USER.id = 1 

या

SELECT user_id, f_fof.friend_id, username 
FROM USER, (
    SELECT f.user_id, f.friend_id 
    FROM FRIEND_LIST f 
    WHERE user_id = 1 
    UNION 
    SELECT f.user_id, fof.friend_id 
    FROM FRIEND_LIST f, FRIEND_LIST fof 
    WHERE user_id = 1 
    AND f.friend_id = fof.user_id 
) as f_fof 
WHERE USER.id   = f_fof.friend_id 
+0

मैं पहली बार क्वेरी करने की कोशिश की, लेकिन यह कहना है कि user_id अस्पष्ट – Enrique

+0

मैं पहली बार प्रयोग करेंगे प्रश्न, दूसरे ने मुझे गलत परिणाम दिए। बहुत बहुत धन्यवाद! – Enrique

2
SELECT f1.user_id, f1.friend_id FROM 
friends_info f1 
WHERE f1.user_id = 1 OR 
f1.user_id IN 
(
select f2.friend_id 
from friends_info f2 
where f2.user_id = 1 
) 
ORDER BY user_id 
+0

हैलो मैंने क्वेरी की कोशिश की लेकिन यह दोस्तों के दोस्तों के दोस्तों को भी लौटाता है। उपर्युक्त उदाहरण में यह 4,5,6,7 – Enrique

+0

हां के दोस्तों को भी लौटाता है, मेरा बुरा ... मैंने यूनियन से बचने की कोशिश की है, लेकिन ऐसा लगता है कि यह काम नहीं कर रहा है ... – a1ex07

+0

ऐसा लगता है कि यह काम करता है अब ... – a1ex07

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