2009-09-13 15 views
9
select * from A left join B on A.columnc=B.columnd 

परिणाम एसक्यूएल ऊपर से वापस लौटे, तो ए और बी में एक ही नाम के साथ कुछ कॉलम ए और बीPHP के साथ एकाधिक समान नाम कॉलम के साथ MySQL पंक्ति से परिणाम कैसे प्राप्त करें?

के दोनों स्तंभ और क्या शामिल होंगे?

PHP से मूल्य कैसे प्राप्त करें?

+0

आपको एक त्रुटि अस्पष्ट कॉलम बताते हुए मिल चाहते हैं - डेटाबेस समान नाम के साथ दो कॉलम की जो उपयोग करने के लिए नहीं बता सकता। –

+4

@rexem: यह सच नहीं है। एसक्यूएल बिल्कुल सही है, त्रुटि तब होगी जब क्वेरी स्पष्ट रूप से कॉलम नाम का चयन कर रही हो जो दोनों तालिका में मौजूद है, लेकिन तालिका उपसर्ग निर्दिष्ट नहीं है। – quosoo

उत्तर

2

आपको चुनिंदा वक्तव्य में column aliases का उपयोग करना चाहिए।

18

शायद आप अपनी क्वेरी में अधिक स्पष्ट होना चाहते हैं। इस तरह आप अपने कॉलम के लिए उपनाम प्रदान कर सकते हैं:

"परिणाम के दो या अधिक स्तंभों में एक ही फ़ील्ड नाम है, तो अंतिम स्तंभ ले जाएगा पूर्वता:

SELECT 
    A.foo as a_foo, 
    B.foo as b_foo 
FROM A 
LEFT JOIN B ON A.columnc = B.columnd 
+0

यदि आपको केवल अपनी दूसरी तालिका से कुछ कॉलम चाहिए, तो आप (mysql में, वैसे भी) कुछ ऐसा कर सकते हैं जैसे "SELECT A। *, B.column_that_also_exist_in_a कुछ एलीज़ ..." – timdev

+0

@tim: इसे करने में सक्षम होना चाहिए कोई एएनएसआई-अनुरूप डेटाबेस सिस्टम। –

7

जवाब PHP documentation में वास्तव में है । एक ही नाम के अन्य स्तंभ (रों) तक पहुंचने के लिए, आप या तो mysql_fetch_row() का उपयोग करके संख्यात्मक सूचकांक के साथ परिणाम तक पहुँचने या उर्फ ​​नाम जोड़ने की जरूरत। उपनाम के बारे में mysql_fetch_array() वर्णन में उदाहरण देखें। "

Especialy mysql_fetch_array() लगता है जब आप सबसे अच्छे उम्मीदवार बनने के लिए चुनिंदा बयान में तारे का उपयोग पर जोर देते हैं:

$row = mysql_fetch_array($result, MYSQL_BOTH) 

तो फिर तुम $row[name] द्वारा और $row[col_number] द्वारा ambigous एक के लिए unambigous क्षेत्रों का उल्लेख कर सकते हैं, लेकिन वह अपने कोड के पोर्टेबिलिटी की सीमा (शायद MySQL के अगले संस्करण के लिए जा रहा है कॉलम को एक अलग क्रम में वापस करें?)। अनुशंसित समाधान आपकी क्वेरी को फिर से लिखना और स्टार का उपयोग करने और अस्पष्ट लोगों के लिए सभी आवश्यक फ़ील्ड सूचीबद्ध करना है - उपनाम का उपयोग करना।

+0

क्या आप डेमो प्रदान कर सकते हैं? – omg

1

जावा + MySQL में ResultSet ऑब्जेक्ट से, आप उदाहरण के लिए getString ("a.id") और getString ("b.id") का उपयोग कर सकते हैं, अगर आपकी क्वेरी "SELECT a.id, b। आईडी से, बी "

मुझे पता नहीं है कि PHP में ऐसा कुछ है या नहीं।

सादर

1

यह किसी के लिए उपयोगी हो सकता है: क्योंकि मैं कुछ templating उपयोग कर रहा था, मैं आसानी से उपनाम हर बार उपयोग नहीं कर सका, और मैं उपयोग में आसानी के लिए साहचर्य सरणी चाहता था। how to mysql_fetch_array on joined tables, but columns have same name पर अपने जवाब के लिए क्रेडिट PILCROW, लेकिन MySQLi में:

$qualified_names = array(); 
for ($i = 0; $i < mysqli_num_fields($result); ++$i) { 
    $fieldinfo=mysqli_fetch_field_direct($result,$i); 
    $table = $fieldinfo->table; 
    $field = $fieldinfo->name; 
    $qualified_names["$table.$field"]="$table.$field"; 
} 
$newrow = array_combine($qualified_names, mysqli_fetch_array($result,MYSQLI_NUM)); 
संबंधित मुद्दे