2012-10-11 16 views
12

का उपयोग कर परिणामों में इंडेक्स के रूप में कॉलम के मान का उपयोग करना मेरे पास कॉलम आईडी, नाम, यूआरएल के साथ 'ब्रांड' नामक एक SQL तालिका है। मैं इस डेटा सेट है कि तालिका में:पीडीओ

1, Solidfloor, solidfloor; 
2, Quickstep, quickstep; 
4, Cleanfloor, cleanfloor; 
5, Blue Dolphin, blue-dolphin; 
6, Krono, krono; 
8, Meister, meister; 

मैं उन सभी अभी प्राप्त करते समय कर रहा हूँ और मैं बदले में एक अच्छा सरणी मिलता है, लेकिन, मैं सरणियों के सूचकांक की जरूरत है एक ऐसी बढ़ती संख्या नहीं होने के लिए, लेकिन उस विशेष पंक्ति की आईडी। मैं परिणाम सेट के माध्यम से निश्चित रूप से लूप कर सकता था, लेकिन क्या ऐसा करने का एक क्लीनर तरीका है?

उत्तर

13

Assoc

मैनुअल के लिए के रूप में लाएं: के रूप में PDOStatement में दर्ज http://php.net/manual/en/pdostatement.fetchall.php

fetch_style

नियंत्रण लौटे सरणी की सामग्री :: लाने()। पीडीओ के मूल्य के लिए डिफ़ॉल्ट :: ATTR_DEFAULT_FETCH_MODE (जो पीडीओ :: FETCH_BOTH के लिए डिफ़ॉल्ट)

परिणाम सेट से एक कॉलम के सभी मानों वाली एक सरणी को वापस करने के लिए, पीडीओ :: FETCH_COLUMN निर्दिष्ट करें। आप कॉलम-इंडेक्स पैरामीटर के साथ इच्छित कॉलम निर्दिष्ट कर सकते हैं।

परिणाम सेट से केवल एक कॉलम के अद्वितीय मान लाने के लिए, bitwise-OR PDO :: FETCH_COLUMN पीडीओ :: FETCH_UNIQUE के साथ।

किसी निर्दिष्ट कॉलम के मानों द्वारा समूहित एक सहयोगी सरणी को वापस करने के लिए, bitwise-OR PDO :: FETCH_COLUMN पीडीओ :: FETCH_GROUP के साथ।

वह अंतिम बिट कुंजी है। यह (मैं मिल सकता है कि) पूरी तरह से प्रलेखित किया जाना प्रतीत नहीं होता है, लेकिन पीडीओ :: FETCH_COLUMN के बजाय, आप वांछित परिणाम प्राप्त करने पीडीओ :: FETCH_GROUP साथ पीडीओ :: FETCH_ASSOC गठजोड़ कर सकते हैं:

$PDOstmt->fetchAll(PDO::FETCH_ASSOC | PDO::FETCH_GROUP) 

तो में

$stmt = $PDO_obj->prepare('select * from brands'); 
$stmt->execute(); 
$result = $stmt->fetchAll(PDO::FETCH_ASSOC | PDO::FETCH_GROUP); 
d($result); 

परिणाम::, उपरोक्त डेटा दिया

array (6) [ 
    '1' => array (1) [ 
     array (2) [ 
      'name' => string (10) "Solidfloor" 
      'url' => string (10) "solidfloor" 
     ] 
    ] 
    '2' => array (1) [ 
     array (2) [ 
      'name' => string (9) "Quickstep" 
      'url' => string (9) "quickstep" 
     ] 
    ] 
    '4' => array (1) [ 
     array (2) [ 
      'name' => string (10) "Cleanfloor" 
      'url' => string (10) "cleanfloor" 
     ] 
    ] 
    '5' => array (1) [ 
     array (2) [ 
      'name' => string (12) "Blue Dolphin" 
      'url' => string (12) "blue-dolphin" 
     ] 
    ] 
    '6' => array (1) [ 
     array (2) [ 
      'name' => string (5) "Krono" 
      'url' => string (5) "krono" 
     ] 
    ] 
    '8' => array (1) [ 
     array (2) [ 
      'name' => string (7) "Meister" 
      'url' => string (7) "meister" 
     ] 
    ] 
] 

(घ() var_dump की तरह, Kint पुस्तकालय से सिर्फ एक आसान डिबगिंग समारोह है() या print_r())

+०१२३५१६४१०

ध्यान दें कि सरणी को इंडेक्स करने के लिए उपयोग किया जाने वाला कॉलम हमेशा परिणामों में पहला स्तंभ होगा, ताकि आप अपने चयन कथन को संशोधित कर सकें कि आप कौन सा कॉलम चाहते हैं। और यह भी ध्यान दें कि अनुक्रमित कॉलम प्रत्येक पंक्ति के सरणी से अलग हो जाएगा; इसके आस-पास पहुंचने के लिए, आप कॉलम को अपने चयन कथन में दो बार जोड़ सकते हैं (यानी, select id, brands.* from brands, आदि)।

यहां पर अधिक पैरामीटर हैं: http://php.net/manual/en/pdostatement.fetch.php, जैसे पीडीओ :: FETCH_UNIQUE यह सुनिश्चित करने के लिए कि प्रत्येक इंडेक्स केवल एक बार उपयोग किया जाता है।

+4

$ सेंट-> fetchAll (पीडीओ :: FETCH_ASSOC | पीडीओ :: FETCH_GROUP); नौकरी की, मदद के लिए धन्यवाद! –

12

हालांकि PHP मैनुअल में PDO::FETCH_UNIQUE विवरण काफी अस्पष्ट है, लेकिन वास्तव में यह exact parameter you actually need है।

$data = $pdo->query('SELECT * FROM table')->fetchAll(PDO::FETCH_UNIQUE); 

आप एक सरणी क्षेत्र पहले SELECT खंड में सूचीबद्ध (जब * तालिका परिभाषा तो पहले क्षेत्र प्रयोग किया जाता है, जो अपने मामले में पता होना चाहिए) द्वारा अनुक्रमित दे रहा है।

ध्यान दें कि डिफ़ॉल्ट रूप से केवल PDO::FETCH_UNIQUE का उपयोग करके आपको दोगुनी मानों के साथ पंक्तियां मिलेंगी। आप या तो इस कॉल में पसंदीदा पंक्ति मोड जोड़ सकते हैं या - बेहतर, इसे सभी पीडीओ कॉल कन्स्ट्रक्टर में या setAttribute() के माध्यम से सेट कर सकते हैं। नीचे दिया गया आउटपुट PDO::FETCH_ASSOC के लिए डिफॉल्ट फ़ेच मोड के रूप में सेट किया गया है।

1 => array (
    'name' => 'Solidfloor', 
    'url' => 'solidfloor', 
), 
    2 => array (
    'name' => 'Quickstep', 
    'url' => 'quickstep', 
), 
    4 => array (
    'name' => 'Cleanfloor', 
    'url' => 'cleanfloor', 
), 
) 
+1

वही जो मैं खोज रहा था, धन्यवाद –