ऐसा करने के कई तरीके होंगे; कुछ तकनीकों में गतिशील धुरी तैयार करने के लिए एसक्यूएल शामिल है। नीचे दिया गया मेरा स्निपेट पिवट करने के लिए php का उपयोग करेगा।
- परिणाम सेट ऑब्जेक्ट के माध्यम से एक
foreach()
के साथ लूप करें -- नहीं, डेटा तक पहुंचने के लिए आपको एक फ़ेचिंग फ़ंक्शन को कॉल करने की आवश्यकता नहीं है क्योंकि परिणाम वस्तु चलने योग्य है। - पहले स्तर की कुंजियों के रूप में नामों के साथ एक बहुआयामी समूह सरणी बनाएं, फिर वर्षों के साथ उप-सरणी और मान के रूप में मान।
- अद्वितीय वर्षों की एक सरणी बनाएं। मेरा दृष्टिकोण वर्ष को कुंजी और मान दोनों के रूप में निर्दिष्ट करके विशिष्टता सुनिश्चित करेगा - क्योंकि सरणियों में डुप्लिकेट कुंजियाँ नहीं हो सकती हैं, मान
array_unique()
को कॉल किए बिना अद्वितीय होंगे बाद में। - वर्षों को एएससी क्रमित करें
- हर साल के लिए डिफ़ॉल्ट मानों की एक सरणी बनाएं। इस मामले में, मैं असाइन कर रहा हूँ
-
डिफ़ॉल्ट मान के रूप में। - शाब्दिक शब्द जोड़ें
name
अद्वितीय वर्षों वाली सरणी के सामने -- इसका उपयोग तालिका की शीर्ष लेख पंक्ति को पॉप्युलेट करने के लिए किया जाएगा। - मैं
implode()
का उपयोग करना पसंद करता हूं चर-कोशिका वाली तालिका पंक्ति तैयार करने के लिए। printf()
चर के साथ शाब्दिक पाठ को मिलाने का एक साफ तरीका है - यह प्रक्षेप/संयोजन वाक्य रचना से बचा जाता है।- प्रत्येक अनुवर्ती तालिका पंक्ति में, डिफ़ॉल्ट वार्षिक मानों को संबंधित व्यक्ति के वार्षिक मानों से बदलें और
implode()
के साथ प्रस्तुत करें । - यदि कोई संभावना है कि परिणाम सेट खाली है, तो आप इस स्निपेट के अधिकांश भाग को
if ($resultObject) { ... }
में लपेटना चाह सकते हैं ब्लॉक.
कोड:(डेमो )
$grouped = [];
$columns = [];
$resultObject = $mysqli->query("SELECT `name`, `value`, `year` FROM `Testab`");
foreach ($resultObject as $row) {
$grouped[$row['name']][$row['year']] = $row['value'];
$columns[$row['year']] = $row['year'];
}
sort($columns);
$defaults = array_fill_keys($columns, '-');
array_unshift($columns, 'name');
echo "<table>";
printf(
'<tr><th>%s</th></tr>',
implode('</th><th>', $columns)
);
foreach ($grouped as $name => $records) {
printf(
'<tr><td>%s</td><td>%s</td></tr>',
$name,
implode('</td><td>', array_replace($defaults, $records))
);
}
echo "</table>";
आउटपुट:(आसानी से पढ़ने के लिए अतिरिक्त स्पेसिंग/टैबिंग के साथ)
<table>
<tr>
<th>name</th> <th>2018</th> <th>2019</th> <th>2020</th>
</tr>
<tr>
<td>Tom</td> <td>15</td> <td>4</td> <td>6</td>
</tr>
<tr>
<td>Kate</td> <td>18</td> <td>20</td> <td>-</td>
</tr>
</table>