Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Putar kumpulan hasil mysql dan buat tabel/matriks html

Akan ada banyak cara untuk melakukan ini; beberapa teknik melibatkan sql untuk menyiapkan pivot dinamis. Cuplikan saya di bawah ini akan menggunakan php untuk melakukan pivot.

  1. Melewati objek kumpulan hasil dengan foreach() -- tidak, Anda tidak perlu memanggil fungsi pengambilan untuk mengakses data karena objek hasil dapat diubah.
  2. Buat larik pengelompokan multidimensi dengan nama sebagai kunci tingkat pertama, lalu subarray dengan tahun sebagai kunci dan nilai sebagai nilai.
  3. Buat rangkaian tahun yang unik. Pendekatan saya akan memastikan keunikan dengan menetapkan tahun sebagai kunci dan nilai -- karena array tidak dapat berisi kunci duplikat, nilainya akan unik tanpa harus memanggil array_unique() nanti.
  4. Urutkan tahun ASC
  5. Buat larik nilai default untuk setiap tahun. Dalam hal ini, saya menetapkan - sebagai nilai default.
  6. Tambahkan kata literal name ke depan larik yang berisi tahun unik -- ini akan digunakan untuk mengisi baris header tabel.
  7. Saya lebih suka menggunakan implode() untuk membuat baris tabel bersel variabel.
  8. printf() adalah cara yang bersih untuk memadukan teks literal dengan variabel -- ini menghindari sintaks interpolasi/penggabungan.
  9. Di setiap baris tabel berikutnya, ganti nilai tahunan default dengan nilai tahunan orang relatif dan sajikan dengan implode() .
  10. Jika ada kemungkinan bahwa kumpulan hasil kosong, maka Anda mungkin ingin membungkus sebagian besar cuplikan ini dalam if ($resultObject) { ... } blokir.

Kode:(Demo )

$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>";

Output:(dengan tambahan spasi/tabbing untuk membaca lebih mudah)

<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. Cara terbaik untuk mengembangkan/mengelola/mendesain tugas/kalender yang berulang

  2. Cara mendapatkan rata-rata dengan orderBy Desc di Laravel 5

  3. Server MySQL telah hilang selama perayapan di Perl

  4. subsistem windows instal server mysql

  5. Bagaimana cara terhubung ke Mysql menggunakan C #?