检查while循环中的相同行并将它们放在单独的表中

时间:2015-01-22 08:42:47

标签: php html mysql

我想首先检查所有相等的行,然后将它们放入一个单独的表中。

这是我到目前为止所做的:

table1
    |   id  |   name    |
    |   1   |   JUS     |
    |   1   |   NUM     |
    |   2   |   SET     |


/**
 * this is the the query for retrieving the data
 * from table1
 */
$query="SELECT 
            id,
            name
        FROM 
            table1
        order by 
            id";

$results=$db->query($query);

$previous='';
while($row=mysqli_fetch_assoc($results)){
    $id=$row['id'];
    $name=$row['name'];

    if($id==$previous){

        /**
         * This is where i am stucked up
         */
        $current='';

    }
    $previous=$id;
}

我希望将1的id作为值放入一个html表中,如下所示

    first html table
    ID      |   1   |   1   |
    Name    |   JUS |   NUM |

并将2的id作为值导入另一个html表。所以我们将获得单独的表格 如果id不相同:

  second html table
    ID      | 2     |
    Name    | SET   |

任何关于如何去做的想法都表示赞赏。

1 个答案:

答案 0 :(得分:3)

您可以先将id s作为密钥收集在容器中,然后将它们组合在一起。之后,只需打印出来:

$data = array();
while($row = $results->fetch_assoc()){
    $id = $row['id'];
    $name = $row['name'];
    $data[$id][] = $name; // group them
}

foreach($data as $id => $values) {
    // each grouped id will be printed in each table
    echo '<table>';
    // header
    echo '<tr>';
        echo '<td>ID</td>' . str_repeat("<td>$id</td>", count($values));
    echo '</tr>';

    echo '<tr>';
    echo '<td>Name</td>';
    foreach($values as $value) {
        echo "<td>$value</td>";
    }
    echo '</tr>';

    echo '</table><br/>';
}

如果这些字段就是这样,如果你需要更动态的东西,你需要另一个维度,而不是仅仅推动name,那么你将需要推动整行:< / p>

$results = $db->query('SELECT id, name, age FROM table1');

$data = array();
while($row = $results->fetch_assoc()){
    $id = $row['id']; unset($row['id']);
    $data[$id][] = $row; // group them
}

$fields = array('name', 'age');

foreach($data as $id => $values) {
    // each grouped id will be printed in each table
    echo '<table>';
    // header
    echo '<tr>';
        echo '<td>ID</td>' . str_repeat("<td>$id</td>", count($values));
    echo '</tr>';

    foreach($fields as $field) {
        // construct td
        $temp = '';
        echo "<tr><td>$field</td>";
        for($i = 0; $i < count($values); $i++) {
            $temp .= '<td>' . $values[$i][$field] . '</td>';
        }
        echo $temp; // constructed td
        echo '</tr>';

    }

    echo '</table><br/>';
}