Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Xoay tập hợp kết quả mysql và tạo bảng / ma trận html

Sẽ có nhiều cách để làm điều này; một số kỹ thuật liên quan đến sql để chuẩn bị trục xoay động. Đoạn mã của tôi bên dưới sẽ sử dụng php để thực hiện xoay.

  1. Lặp qua đối tượng tập kết quả bằng foreach() - không, bạn không cần gọi hàm tìm nạp để truy cập dữ liệu vì đối tượng kết quả có thể lặp lại.
  2. Tạo mảng nhóm nhiều chiều với tên là khóa cấp đầu tiên, sau đó là các mảng con với năm là khóa và giá trị là giá trị.
  3. Tạo một loạt các năm duy nhất. Cách tiếp cận của tôi sẽ đảm bảo tính duy nhất bằng cách chỉ định năm làm cả khóa và giá trị - bởi vì các mảng không thể chứa các khóa trùng lặp, các giá trị sẽ là duy nhất mà không cần phải gọi array_unique() sau.
  4. Sắp xếp các năm theo ASC
  5. Tạo một mảng các giá trị mặc định cho hàng năm. Trong trường hợp này, tôi đang gán - làm giá trị mặc định.
  6. Thêm từ theo nghĩa đen name ở phía trước của mảng chứa các năm duy nhất - điều này sẽ được sử dụng để điền vào hàng tiêu đề của bảng.
  7. Tôi thích sử dụng implode() để tạo một hàng trong bảng có ô thay đổi.
  8. printf() là một cách dễ dàng để trộn văn bản theo nghĩa đen với các biến - nó tránh cú pháp nội suy / nối.
  9. Trong mỗi hàng bảng tiếp theo, thay thế các giá trị hàng năm mặc định bằng các giá trị hàng năm của người tương đối và hiển thị bằng implode() .
  10. Nếu có bất kỳ khả năng nào mà tập hợp kết quả trống, thì bạn có thể muốn bọc phần lớn đoạn mã này trong một if ($resultObject) { ... } khối.

Mã:( 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>";

Đầu ra:(có thêm khoảng cách / tab để đọc dễ dàng hơn)

<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. Tìm các bản sao trong cùng một bảng trong MySQL

  2. MySQL Views và sử dụng chỉ mục

  3. Mysql thay đổi bộ mã bảng mặc định thành bộ mã cơ sở dữ liệu

  4. Làm cách nào để bạn chỉnh sửa một thủ tục được lưu trữ trong MySQL?

  5. Các tùy chọn chọn nguồn cấp dữ liệu từ DB tùy thuộc vào các tùy chọn chọn khác