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

Làm thế nào để hợp nhất hàng bảng với mảng PHP?

Tôi sử dụng kỹ thuật 'đọc trước' để xử lý các vòng lặp lồng nhau. Điều đó có nghĩa là không thể sử dụng vòng lặp 'foreach' vì bản ghi tiếp theo phải được đọc ngay sau khi bản ghi hiện tại đã được xử lý. Về cơ bản, hành động cuối cùng bạn thực hiện trong vòng lặp là đọc bản ghi tiếp theo khi bạn đang thiết lập nó cho lần lặp tiếp theo. Lưu ý, bạn không bao giờ kiểm tra thời điểm in bản ghi vì điều đó được quyết định bởi cấu trúc của các nhóm. Các vòng lặp mã giống như cấu trúc của các nhóm trong dữ liệu

Một 'nhóm' là tất cả các bản ghi có cùng id .

Tôi giả định rằng 'nội dung' và 'hành động' giống hệt nhau cho mỗi mục trong nhóm.

Đã chỉnh sửa để thêm thuộc tính 'rowspan' vào các thẻ 'td' thích hợp. Tôi nghi ngờ css có thể dễ dàng hơn vào thời điểm này.

Vấn đề là nhóm không thể được hiển thị cho đến khi biết có bao nhiêu mục nhập trong đó.

Vì vậy, tôi 'đệm' tất cả các bản ghi thuộc một nhóm trong một mảng. ở cuối nhóm, nó được hiển thị với các thuộc tính 'rowspan' thích hợp trong html.

Nó được thử nghiệm trên PHP 5.3.18. Nó bao gồm dữ liệu thử nghiệm.

<?php /* Q24028866 */
$testData = array(array('id' => 2, 'date' => '05/13/2014', 'content' => 'some contents 2', 'act' => 'act1 act2 act3'),
                  array('id' => 2, 'date' => '05/28/2014', 'content' => 'some contents 2',  'act' => 'act1 act2 act3'),
                  array('id' => 7, 'date' => '06/04/2014', 'content' => 'some contents 7',  'act' => 'act1 act2 act3'),
                  array('id' => 8, 'date' => '06/08/2014', 'content' => 'some contents 8',  'act' => 'act1 act2 act3'),
                  array('id' => 8, 'date' => '06/09/2014', 'content' => 'some contents 8',  'act' => 'act1 act2 act3'));
?>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<table border='1'>
<thead><th>Date</th><th>Content</th><th>Act</th></thead>
<?php
// use 'read ahead' so there is always a 'previous' record to compare against...
$iterContents = new \ArrayIterator($testData);
$curEntry = $iterContents->current();

while ($iterContents->valid()) { // there are entries to process

    $curId = $curEntry['id'];

    // buffer the group to find out how many entries it has...
    $buffer = array();
    $buffer[] = $curEntry;

    $iterContents->next(); // next entry - may be same or different id...
    $curEntry = $iterContents->current();

    while ($iterContents->valid() && $curEntry['id'] == $curId) {  // process the group...
        $buffer[] = $curEntry; // store all records for a group in the buffer

        $iterContents->next(); // next entry - may be same or different id...
        $curEntry = $iterContents->current();
    }

     // display the current group in the buffer...
     echo '<tr>';
     echo '<td>', $buffer[0]['date'], '</td>';
     $rowspan = count($buffer) > 1 ? ' rowspan="'. count($buffer) .'"' : '';
     echo '<td', $rowspan, '>', $buffer[0]['content'], '</td>',
           '<td', $rowspan, '>', $buffer[0]['act'], '</td>';
     echo '</tr>';
     for($i = 1; $i < count($buffer); $i++) {
          echo '<tr><td>', $buffer[$i]['date'], '</td>';
          echo '</tr>';
     }
} ?>
</table>
</body>
</html>


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Loại trừ các dòng kết quả có giá trị NULL trong bất kỳ trường nào?

  2. SQL - Tìm tất cả thời gian ngừng hoạt động và độ dài của thời gian ngừng hoạt động từ dữ liệu MySQL (tập hợp các hàng có tem thời gian và thông báo trạng thái)

  3. Xây dựng truy vấn chèn từ mảng MySQL và PHP

  4. MySQL số ​​lượng các mục trong mệnh đề

  5. JSON so với Mảng được tuần tự hóa trong cơ sở dữ liệu