2011-06-04 5 views
5

जैसा कि आप नीचे देख सकते हैं, मैं यह देखने के लिए जांच कर रहा हूं कि वर्तमान उपयोगकर्ता user_a या user_b तालिका मित्रों के कॉलम में है या नहीं।MySQL सशर्त

वर्तमान उपयोगकर्ता कहां स्थित है, इस पर निर्भर करता है कि मैं उसका संबंधित मित्र प्राप्त करना चाहता हूं।

किसी तरह मैं इस वाक्य काम करते हैं और आश्चर्य नहीं मिल सकता है अगर कोई मुझे बता सकते हैं कि क्या गलत है (मैं IF user_a = 2 के पास लाइन 3 पर एक त्रुटि प्राप्त।

SELECT * 
    FROM friends 
IF user_a = 2 THEN 
    JOIN user_profiles ON friends.user_b = user.profiles.user_id 
WHERE user_a = 2 
    AND accepted = 1; 
ELSEIF user_b = 2 THEN 
    JOIN user_profiles ON friends.user_a = user_profiles.user_id 
WHERE user_b = 2 
    AND accepted = 1; 
END IF; 
+0

ठीक है वहाँ एक आम सहमति है कि यह कुछ crapshot mySQL कोड है लगता है - किसी को भी करता है मेरे लिए एक सुझाव/रोडमैप परिणाम मैं चाहता हूँ प्राप्त करने के लिए है? – pepe

+0

यदि आप समझते हैं कि आप वास्तव में क्या करने की कोशिश कर रहे हैं, तो सहायता करना आसान होगा। – dkamins

+0

आप इसे यूनियन के साथ कर सकते हैं ... मेरा जवाब देखें। –

उत्तर

8

आप एक संघ के साथ यह कर सकते हैं:

select f.*, up_a.* from friends f 
    inner join user_profiles up_a on f.user_a=up_a.user_id 
    where f.user_b=2 and f.accepted=1 
union 
select f.*, up_b.* from friends f 
    inner join user_profiles up_b on f.user_b=up_b.user_id 
    where f.user_a=2 and f.accepted=1; 
+0

@AJ - अच्छा, यह अच्छी तरह से काम करता है - @AJ क्या आप पंक्तियों 3 और 7 में 'और स्वीकृत = 1' जोड़ने के लिए अपनी प्रतिक्रिया संपादित कर सकते हैं? जो मेरे मूल प्रश्न को पूरा करता है और मेरी क्वेरी को दोस्ती को फ़िल्टर करने की इजाजत देता है जो अभी भी लंबित हैं (यानी, स्वीकृत = 0) - बहुत बहुत धन्यवाद – pepe

+0

@torr - किया, माफ करना मुझे याद आया! सौभाग्य। –

0

मैं वाक्य रचना आप के लिए प्रयास कर रहे हैं विश्वास करते हैं उपयोग असमर्थित है। मुझे नहीं लगता कि आप इस तरह अपनी SQL विवरण शाखा एक IF सशर्त का उपयोग कर सकते है। यह आप इन पंक्तियों के साथ स्थानीय चर, कुछ का उपयोग कर सकते हैं एक SELECT CASE

में इस फिट करने के लिए संभव हो सकता है काम कर सकते हैं:

BEGIN 
SELECT user_a, user_b INTO local_a, local_b FROM friends; 

IF local_a = 2 THEN 
    SELECT * FROM friends JOIN user_profiles ON friends.user_b = users.profiles.user_id 
    WHERE user_a = 2 AND accepted = 1; 
ELSEIF user_b = 2 THEN 
    SELECT * FROM friends JOIN user_profiles ON friends.user_b = users.profiles.user_id 
    WHERE user_b = 2 AND accepted = 1 
END IF; 
END; 

मुझे इसकी वैधता निश्चित नहीं है, लेकिन यह आपको सही सड़क भेज सकती है। यह भी देखें: http://dev.mysql.com/doc/refman/5.0/en/select-into-statement.html

+0

क्या आपका मतलब 'जॉइन' और 'WHERE' के साथ 'IF' का उपयोग करना है? – pepe

+0

@torr हाँ मेरा मतलब है 'SELECT' कथन के अंदर किसी भी स्थान पर' IF' का उपयोग करना और इसे गतिशील रूप से पूर्ण मान्य SQL कथन बनाने की उम्मीद है। –

3

आप वाक्यविन्यास का आविष्कार कर रहे हैं। MySQL में "IF" के रूप में समर्थित है:

  1. संग्रहित प्रक्रियाओं और ट्रिगर्स में उपयोग के लिए विवरण। डॉक्स: http://dev.mysql.com/doc/refman/5.0/en/if-statement.html

  2. फ़ंक्शन, परिणाम कॉलम के लिए वैकल्पिक अभिव्यक्तियों में से किसी एक को चुनने में उपयोग के लिए। डॉक्स: http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html#function_if

आप पूरी तरह से कुछ और कर रहे हैं।

+0

thx @dkamins, अगर आपको यह प्रश्न प्राप्त करने का विकल्प है तो – pepe