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

मैं mysql तालिका पंक्ति को कॉलम के रूप में कैसे प्रदर्शित करूं?

आप जो करना चाहते हैं उसे आपके डेटा को "पिवोटिंग" के रूप में जाना जाता है और कुछ ऐसा है जिसके लिए कुछ अन्य आरडीबीएमएस के पास मूल समर्थन है, लेकिन MySQL (डिजाइन द्वारा, जैसा कि डेवलपर्स को लगता है कि इस तरह के जोड़तोड़ प्रस्तुति परत में हैं) नहीं है।

हालांकि, आपके पास कुछ विकल्प हैं:

  1. मैन्युअल रूप से पिवोटिंग ऑपरेशन करने के लिए एक भयानक MySQL क्वेरी का निर्माण करें:

    SELECT student_id AS Matriculation, MAT111, MAT112, gp AS GP
      FROM gp
      NATURAL JOIN (
        SELECT student_id, grade AS MAT111
        FROM result
        WHERE course_code = 'MAT111'
      ) AS tMAT111
      NATURAL JOIN (
        SELECT student_id, grade AS MAT112
        FROM result
        WHERE course_code = 'MAT112'
      ) AS tMAT112
      -- etc.
    WHERE level = @level AND semester = @semester
    

    यदि आप इस रास्ते से नीचे जाना चुनते हैं, तो आप PHP में लूपिंग कंस्ट्रक्शन या MySQL में तैयार स्टेटमेंट का उपयोग करके इस क्वेरी को स्वचालित रूप से जनरेट करके अपने जीवन को थोड़ा आसान बना सकते हैं।

    यहाँ एक तरीका है जिससे आप PHP में ऐसा कर सकते हैं:

    1. पाठ्यक्रमों की सूची प्राप्त करें:

      $dbh = new PDO('mysql:dbname=testdb;host=127.0.0.1', $user, $password);
      $qry = $dbh->query("SELECT DISTINCT course_code FROM result [WHERE ...]");
      $courses = $qry->fetchAll(PDO::FETCH_COLUMN, 0);
      
    2. उपरोक्त SQL का निर्माण करते हुए, परिणामों पर लूप करें:

      mb_regex_encoding($charset);
      
      $columns = mb_ereg_replace('`', '``', $courses);
      $sql = "
      SELECT student_id AS Matriculation, `".implode("`,`", $columns)."`, gp AS GP
        FROM gp";
      
      foreach ($columns as $column) $sql .= "
        NATURAL JOIN (
          SELECT student_id, grade AS `$column`
          FROM result
          WHERE course_code = ?
        ) AS `t$column`";
      
      $sql .= "
      WHERE level = ? AND semester = ?";
      
    3. मापदंडों के रूप में पाठ्यक्रमों की सरणी में गुजरते हुए SQL को निष्पादित करें:

      $qry = $dbh->prepare($sql);
      
      $params = $courses;
      array_push($params, $level, $semester);
      $qry->execute($params);
      
    4. परिणाम आउटपुट करें:

      echo "<table>";
      
      echo "<tr>";
      for ($i = 0; $i < $qry->columnCount(); $i++) {
        $meta = $qry->getcolumnMeta($i);
        echo "<th scope='col'>" . htmlentities($meta['name']) . "</th>";
      }
      echo "</tr>";
      
      while ($row = $qry->fetch(PDO::FETCH_NUM)) {
        echo "<tr>";
        foreach ($row as $field) echo "<td>" . htmlentities($field) . "</td>"
        echo "</tr>";
      }
      
      echo "</table>";
      
  2. उपरोक्त को एकबारगी ऑपरेशन के रूप में करें ताकि आपके MySQL डेटाबेस की संरचना को इस वांछित लेआउट को और अधिक बारीकी से प्रतिबिंबित किया जा सके (तालिका परिवर्तित होने के बाद आसान है, लेकिन डेटाबेस के अन्य उपयोगों को प्रभावित कर सकता है):

    CREATE TABLE StudentGrades (PRIMARY KEY('Matriculation'))
    SELECT student_id AS Matriculation, MAT111, MAT112, gp AS GP
      -- etc. as above
    

    वैकल्पिक रूप से, आप एक VIEW जो एक प्रकार की "वर्चुअल टेबल" है जिसे अंतर्निहित तालिका के आधार पर इस तरह संरचित किया जाता है।

  3. डेटा को मैन्युअल रूप से PHP में पिवट करें (अपेक्षाकृत थकाऊ)।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP फ्लोट/डबल को MySQL DECIMAL के रूप में संग्रहीत किया जाता है

  2. MySQL एक ही SQL में सूची में और सूची में नहीं चुनें

  3. PHP पीडीओ एकाधिक चयन क्वेरी लगातार अंतिम पंक्ति को छोड़ रही है

  4. MySQL - अद्वितीय विदेशी कुंजी

  5. Django:देव के लिए sqlite, उत्पादन के लिए mysql?