【问题标题】:MySQL, PHP: split up output table in categoriesMySQL,PHP:按类别拆分输出表
【发布时间】:2016-05-17 14:34:27
【问题描述】:

大家好, 我有一个问题,希望有人能帮助我。

我的 MySQL 数据库如下所示:

我想以这种方式在表格中输出这些数据:

我的实际代码如下所示:

<html>
<body>
<table>

<?php
$root = realpath($_SERVER["DOCUMENT_ROOT"]);
include "$root/config.php";

$stmt = $pdo->prepare('SELECT * FROM TestTable ORDER BY name');
$stmt->execute();


$results = $stmt->fetchAll();


if (empty($results)) {
    echo 'Error!'; 
} else {
foreach( $results as $row ) {
        echo
        "
        <tr>
        <td class=\"left\">".$row['name']."</td>
        <td class=\"right\">".$row['address']."</td>
        </tr>
        ";
}
}

?>
</table>
</body>
</html>

输出看起来像这样:

当职业与前一排的职业不一样时,如何让职业名称始终在最前面?

为了解决这个问题,我有这个代码:

<?php
$mysqli = new mysqli(host,username,password,db_name);

$sql = "SELECT * FROM TestTable ORDER BY profession, name";
$array = [];
$html = "";

    if ($result = $mysqli->query($sql)) {
        while($row = $result->fetch_assoc()) {
            if (!isset($array[$row['profession']])) {
                $array[$row['profession']] = array();
            }
            $array[$row['profession']][] = $row['name'];
        }
    }



foreach ($array as $profession => $name) {
    $html .= '<p style="font-weight:bold">'.$profession.'</p>';
    foreach ($name as $name) {
        $html .= '<p class="name">'.$name.'</p>';
    }
}
echo $html;

?>

但我也需要这张桌子上的街道。我需要这个带有 PDO 而不是 MySQLi 的代码。我试图解决这个问题,但没有成功。

有人可以帮帮我吗?

您好, 大卫。

【问题讨论】:

  • ORDER BY profession,然后跟踪上次看到的职业,如果不同则输出一个新的标题。
  • @eggyal 说了什么。或将$array[$row['profession']][] = $row['name']; 更改为$array[$row['profession']][] = $row;。您现在在关联数组中拥有所有数据(不仅仅是名称),按专业组织。只需在表格中输出您需要的键即可。
  • 并且不要混合使用pdo和mysqli。决定你使用哪一个并坚持下去!
  • @Shadow,我知道。因此我写了“我需要这个带有 PDO 而不是 MySQLi 的代码”。我想为我的代码使用 PDO。但我不知道如何“转换”。

标签: php mysql database mysqli pdo


【解决方案1】:

试试这样的:

$stmt = $pdo->prepare('SELECT * FROM TestTable ORDER BY profession, name');
$stmt->execute();

$results = $stmt->fetchAll();

if (empty($results)) {
   echo 'Error!'; 
} else {
$profession = $row['profession'];
foreach( $results as $row ) {
  if ($row['profession'] <>$profession) {
       echo "<tr><td>". $row['profession']."</td></tr>";
     }
    echo "<tr>
    <td class=\"left\">".$row['name']."</td>
    <td class=\"right\">".$row['address']."</td>
    </tr>
    ";
   $profession = $row['profession'];
}
}

【讨论】:

  • 它工作正常。非常感谢你。谢谢!谢谢你。你太棒了。
猜你喜欢
  • 1970-01-01
  • 2020-01-06
  • 1970-01-01
  • 1970-01-01
  • 2013-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多