2012-09-18 14 views
13

अभी मैं दो तालिकाओं कि कुछ इस तरह दिखाई साथ एक छोटे से डेटाबेस है:MySQL में एक विदेशी कुंजी का उपयोग करके मैं क्वेरी कैसे कर सकता हूं?

users table 
    ==================== 
    id name status_id 
    1 Bobby 3 
    2 James 2 

और

statuses table 
    ============= 
    id value 
    1 Waiting 
    2 Approved 
    3 Other 

status_id स्थितियों मेज से आईडी के लिए एक विदेशी कुंजी बाधा के रूप में सेटअप है। मेरे क्वेरी इस तरह दिखता है: जब मैं $row['status_id'] प्रदर्शित यह 2 आउटपुट लेकिन मैं इसे Approved बजाय के रूप में प्रदर्शित करना चाहते हैं

SELECT * 
FROM `users` 
WHERE `status_id` = 2"; 

, सबसे अच्छा तरीका यह है, क्या है?

+0

http उल्लेख कर सकते हैं: // stackoverflow.com/questions/260441/how-to-create-relationships-in-mys ql .... हालांकि विदेशी कुंजी केवल InnoDB पर समर्थित हैं, आप MyIsam में ऐसी चीज नहीं कर सकते हैं। –

+0

@MiroMarkarian रिश्ते ठीक से सेटअप है और यह InnoDB है, मुझे अभी समझ में नहीं आया कि 'जॉइन' का उपयोग कैसे करें, लेकिन इसका उत्तर नीचे दिया गया था। प्रश्न का उत्तर देने और ANSI- अनुपालन जॉइन सिंटैक्स का उपयोग करने के लिए –

उत्तर

19
SELECT u.*, s.* 
FROM users u 
    inner join statuses s on u.status_id = s.id 
WHERE u.status_id = 2 
+0

+1। – Aaron

+0

मैंने इसे अपनी क्वेरी के रूप में उपयोग करने का प्रयास किया, लेकिन जब मैं '$ पंक्ति ['status_id'] echo करता हूं, तो यह अभी भी' 2' –

+0

@Riboflavin आउटपुट करता है क्योंकि ऐसा है क्योंकि आप status_id के लिए पूछ रहे हैं, मेरा जवाब देखें। यदि आप वास्तव में स्थिति तालिका में कॉलम का नाम हैं तो आपको 'मान' के लिए पूछना होगा। – thatidiotguy

2

सबसे आसान तरीका है के माध्यम से किया जाएगा मिलती है:

select * 
from User u join Status s on u.status_id = s.id; 

(यदि आप सब पर स्थिति-आईडी चाहते हैं, तो आप स्तंभ है कि आप का चयन-खंड में चाहते हैं निर्दिष्ट कर सकते हैं।)

0

आपकी उपयोगकर्ता तालिका में इसमें अनुमोदित मूल्य नहीं है। यह आपकी स्थिति तालिका में है। जब आप status_id का अनुरोध करते हैं तो आपको उस क्वेरी से उस मान को वापस प्राप्त करने जा रहे हैं। मुझे लगता है कि यह काम करने के लिए आपको JOIN ON status_id करना है। या एक दूसरी क्वेरी करो।

0

आप यहाँ ing नहीं कर रहे हैं JOIN:

SELECT * 
FROM Users U, Statuses S 
WHERE S.id=U.status_ID 
AND status_id = 2; 
5

आपको क्या करना होगा इस

SELECT * 
FROM `users` 
JOIN statuses ON statuses.id = users.status_id 
WHERE `status_id` = 2"; 

है और फिर आप के लिए

$row['value'];