2012-08-30 6 views
5

मैं निम्नलिखित दो तालिकाओं:पीडीओ ऑटो-एलियासिंग लाने पर?

foo:

ID  NUMBER(38) 
DATA VARCHAR2(10) 

बार:

ID  NUMBER(38) 
FOO_ID NUMBER(38) 
DATA VARCHAR2(10) 

जब PDO का उपयोग कर निम्न क्वेरी जारी करने के लिए:

SELECT * FROM foo f INNER JOIN bar b ON (f.id = b.foo_id) 

किसी प्रकार के ऑटो-एलाइज्ड प्रारूप में शामिल होने से कॉलम के सभी वापस पाने का कोई तरीका है (उदा। "FOO.ID", "FOO.DATA", "BAR.ID", आदि) ताकि मुझे क्वेरी में प्रत्येक कॉलम निर्दिष्ट करने और उपनाम करने की आवश्यकता न हो?

मैंने विभिन्न fetch modes पर सभी दस्तावेज पढ़ लिए हैं, और flags/options के साथ प्रयोग किया है, लेकिन फिर भी मुझे लगता है कि मैं क्या ढूंढ रहा हूं।

अपडेट:, दोनों foo और bar से कॉलम प्रदर्शित

array(3) { 
    ["ID"]=> 
    string(1) "1" 
    ["DATA"]=> 
    string(5) "bar 1" 
    ["FOO_ID"]=> 
    string(1) "1" 
} 

PDO::FETCH_NUM का उपयोग करना:

PDO::FETCH_ASSOC का उपयोग करना, foo से कॉलम bar से कॉलम द्वारा ओवरराइट हो रहे हैं , क्रम में, लेकिन किसी भी तरीके से पहचानने के लिए कि कौन से कॉलम आयाम को छोड़कर, कौन से कॉलम से आया था उन स्तंभों में से प्रत्येक मेज और सटीक क्रम (त्रुटि प्रवण) में स्तंभों की एर:

array(5) { 
    [0]=> 
    string(1) "1" 
    [1]=> 
    string(5) "foo 1" 
    [2]=> 
    string(1) "1" 
    [3]=> 
    string(1) "1" 
    [4]=> 
    string(5) "bar 1" 
} 

PDO::FETCH_BOTH का उपयोग करना, हम उचित रूप में PDO::FETCH_ASSOC और PDO::FETCH_NUM संयुक्त रूप में एक ही समस्याओं में चलाने के लिए, और एक बुरी तरह अस्पष्ट परिणाम सेट बनाने के लिए:

array(8) { 
    ["ID"]=> 
    string(1) "1" 
    [0]=> 
    string(1) "1" 
    ["DATA"]=> 
    string(5) "bar 1" 
    [1]=> 
    string(5) "foo 1" 
    [2]=> 
    string(1) "1" 
    ["FOO_ID"]=> 
    string(1) "1" 
    [3]=> 
    string(1) "1" 
    [4]=> 
    string(5) "bar 1" 
} 

आदर्श रूप में, परिणाम सेट इस के समान दिखना चाहिए:

array(5) { 
    ["FOO.ID"]=> 
    string(1) "1" 
    ["FOO.DATA"]=> 
    string(5) "foo 1" 
    ["BAR.ID"]=> 
    string(1) "1" 
    ["BAR.FOO_ID"]=> 
    string(1) "1" 
    ["BAR.DATA"]=> 
    string(5) "bar 1" 
} 
+0

आप हमेशा अपने योग्य नाम 'tableName.columnName' के साथ एक कॉलम देख सकते हैं, यदि यह है, तो आपका क्या मतलब है (हालांकि यह उपनाम नहीं है)। – KingCrunch

+0

वैसे भी 'चयन *' के बजाय चुनिंदा प्रश्नों में कॉलम को स्पष्ट रूप से सूचीबद्ध करने के लिए एक अच्छी आदत है ... –

+0

@ माइकल बर्ककोस्की: दुर्भाग्यवश, मेरे पास इस उदाहरण में वह लक्जरी नहीं है। – FtDRbwLXw6

उत्तर

1

वहाँ पर्दे के पीछे यह करने के लिए कोई रास्ता नहीं प्रतीत होता है। स्पष्ट एलियासिंग एकमात्र तरीका है।

2

नहीं, आप नहीं, कम से कम आपको बस इतना करना कर सकते हैं:

SELECT f.*, b.* FROM foo f INNER JOIN bar b ON (f.id = b.foo_id) 
+0

हालांकि यह पीडीओ में वांछित परिणाम नहीं दे रहा है, हालांकि। जब आप लाते हैं तो कुंजियों में से कोई भी 'f.id' या इसी तरह लेबल नहीं होता है। वास्तव में, ऐसा लगता है कि वास्तव में गैर-संख्यात्मक कुंजी ओवरराइट करते हैं और वास्तव में अजीब परिणाम सेट उत्पन्न करते हैं। – FtDRbwLXw6

0

इस प्रयास करें:

SELECT f.ID as fID, f.DATA as fDATA, b.*, FROM foo f INNER JOIN bar b ON (f.id = b.foo_id) 

विचार केवल विरोधी गुण बदलने के लिए इतना है कि वहाँ कोई और अधिक संघर्ष है।

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