Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

एक mysql परिणाम सेट को पिवट करें और html तालिका/मैट्रिक्स बनाएं

ऐसा करने के कई तरीके होंगे; कुछ तकनीकों में गतिशील धुरी तैयार करने के लिए एसक्यूएल शामिल है। नीचे दिया गया मेरा स्निपेट पिवट करने के लिए php का उपयोग करेगा।

  1. परिणाम सेट ऑब्जेक्ट के माध्यम से एक foreach() के साथ लूप करें -- नहीं, डेटा तक पहुंचने के लिए आपको एक फ़ेचिंग फ़ंक्शन को कॉल करने की आवश्यकता नहीं है क्योंकि परिणाम वस्तु चलने योग्य है।
  2. पहले स्तर की कुंजियों के रूप में नामों के साथ एक बहुआयामी समूह सरणी बनाएं, फिर वर्षों के साथ उप-सरणी और मान के रूप में मान।
  3. अद्वितीय वर्षों की एक सरणी बनाएं। मेरा दृष्टिकोण वर्ष को कुंजी और मान दोनों के रूप में निर्दिष्ट करके विशिष्टता सुनिश्चित करेगा - क्योंकि सरणियों में डुप्लिकेट कुंजियाँ नहीं हो सकती हैं, मान array_unique() को कॉल किए बिना अद्वितीय होंगे बाद में।
  4. वर्षों को एएससी क्रमित करें
  5. हर साल के लिए डिफ़ॉल्ट मानों की एक सरणी बनाएं। इस मामले में, मैं असाइन कर रहा हूँ - डिफ़ॉल्ट मान के रूप में।
  6. शाब्दिक शब्द जोड़ें name अद्वितीय वर्षों वाली सरणी के सामने -- इसका उपयोग तालिका की शीर्ष लेख पंक्ति को पॉप्युलेट करने के लिए किया जाएगा।
  7. मैं implode() का उपयोग करना पसंद करता हूं चर-कोशिका वाली तालिका पंक्ति तैयार करने के लिए।
  8. printf() चर के साथ शाब्दिक पाठ को मिलाने का एक साफ तरीका है - यह प्रक्षेप/संयोजन वाक्य रचना से बचा जाता है।
  9. प्रत्येक अनुवर्ती तालिका पंक्ति में, डिफ़ॉल्ट वार्षिक मानों को संबंधित व्यक्ति के वार्षिक मानों से बदलें और implode() के साथ प्रस्तुत करें ।
  10. यदि कोई संभावना है कि परिणाम सेट खाली है, तो आप इस स्निपेट के अधिकांश भाग को 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>


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql उपयोगकर्ता पंक्ति स्तर पहुंच

  2. MySQL तालिका में डुप्लिकेट कैसे हटाएं

  3. यदि MySQL में फ़ील्ड रिक्त है तो 0 लौटें

  4. एक MySQL डेटाबेस फ़ील्ड में डेटा जोड़ना जिसमें पहले से ही डेटा है

  5. मैं MySQL पर SQL केस संवेदनशील स्ट्रिंग तुलना कैसे कर सकता हूं?