Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да обединим ред от таблица с PHP масив?

Използвам техниката „четене напред“ за обработка на вложени цикли. Това означава, че циклите „foreach“ не могат да се използват, тъй като следващият запис трябва да бъде прочетен веднага след като текущият бъде обработен. По принцип последното действие, което правите в цикъла, е четене на следващия запис, докато го настройвате за следващата итерация. Имайте предвид, че никога не тествате кога да отпечатате запис, тъй като това се решава от структурата на групите. Кодовите цикли са същите като структурата на групите в данните

„Група“ е всички записите със същия id .

Предполагам, че „съдържание“ и „действие“ са идентични за всеки запис в групата.

Редактирано за добавяне на атрибути „rowspan“ към съответните тагове „td“. Подозирам, че css може да е по-лесен на този етап.

Проблемът е, че групата не може да се покаже, докато не се знае колко записа има в нея.

И така, аз „буферирам“ всички записи, принадлежащи към група в масив. в края на групата се показва със съответните атрибути „rowspan“ в html.

Тестван е на PHP 5.3.18. Той включва тестови данни.

<?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. Как да се определят оптималните индекси на MySQL таблици, когато съдържанието на клаузата WHERE варира?

  2. Какви рамки да използвам, за да стартирам първия си производствен scala проект?

  3. Сортиране на нули последно

  4. SQL изявление за избор на дублиращи се записи, появяващи се повече от 2 пъти

  5. Neo4j - Създайте индекс с помощта на Cypher