来自非连续行的按列的 PHP 表

标签 php mysql pdo

几个月来我一直在努力想出一个可接受的代码来创建表。我现在所拥有的有效,但我知道这不是正确的方法。

我想要完成的是创建一个包含九列和六行的表格。每列都需要从我的数据库中的不同“类”中提取,我已将其链接为下图。

第一个单元格将拉出第一个“设施”类条目,第二个单元格将拉出第一个“Star-Line”类条目,依此类推,“RoHS”将第一行四舍五入。第二行的第一个单元格将在“设施”类别下拉出第二个条目,并从“Star-Line”类别中拉出第二个条目,依此类推,“RoHS”将第二行四舍五入。这将持续六行,直到表格完成。

我对此表所做的改动是创建一个名为“class_id”的表列,并使其以 9 为增量,并为没有 6 个条目的行添加空白字段。您可以看到下面的表格,它看起来是正确的,但我知道我没有以正确的方式到达那里。

在我的完美世界中,我希望有一个像现在这样的极简数据库,没有任何空白条目,并且能够按“类”拉取并将该数据放入正确的单元格中。

我想使用其他数据库来执行此操作,并且希望能帮助您最终解决此问题。

Mysql Data Base

Proper Looking Table

<?

$attrs = array(PDO::ATTR_PERSISTENT => true);
$dbCon = new PDO("mysql:host=".$host.";dbname=".$dbName, $username, $password, $attrs);
$dbCon->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);


?>

<div style='border-bottom: 1px dashed #0083ca; height: 150px;'>
    <p><img style='float: left;' alt='Quality' src='/images/quality/images/certified.jpg' height='146' width='200' />Amphenol Industrial Products Group prides itself on producing the highest quality connectors in the world. We aim to 'Delight Our Customers' by supplying reliable, world class interconnect products. Our Quality Assurance systems ensure consistent processes across all of our facilities around the globe. Our list of certifications can be found within this page.</p>
</div><br>

<?

echo "<table id='qTable'>".PHP_EOL;
echo "<thead>".PHP_EOL;
echo "<tr>".PHP_EOL;
    $headsql = "SELECT * FROM head";
    $hstmt = $dbCon->prepare($headsql);
    $hstmt->execute();

while ($headrow = $hstmt->fetch(PDO::FETCH_ASSOC)) {

if ($headrow[trackeventCat] == 'RoHS') {
    echo "<th><strong>$headrow[trackeventCat]</strong></th>".PHP_EOL; //Title   
    }

    else {  
    echo "<th><a href='$headrow[link]' target='_blank'"?> onclick="_gaq.push(['_trackEvent', '<? echo "$headrow[trackeventType]"?>', 'Quality', '<?php echo "$headrow[trackeventFile]"?>']);"><? echo "<strong>$headrow[trackeventCat]</strong></a></th>".PHP_EOL; //Title
    }
}
echo "</tr>".PHP_EOL;
echo "</thead>".PHP_EOL;    

    $sql = "SELECT * FROM certs ORDER BY class_id, id";
    $stmt = $dbCon->prepare($sql);
    $stmt->execute();

$nRows = $dbCon->query('SELECT COUNT(*) FROM certs')->fetchColumn(); 
$cntr = 0;

echo "<tbody>".PHP_EOL;
echo "<tr>".PHP_EOL;
 while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {

 $cntr++;


if ($row[text] == 'IP68-8' && $row['class'] == 'Star-Line') {
    echo "<td><a href='/$row[file]' target='_blank'"?> onclick="_gaq.push(['_trackEvent', 'Downloads', 'Quality', '<?php                            
        echo "$row[text] | $row[class]"?>']);"><? echo "$row[text]</a></td>".PHP_EOL;
}
    elseif (substr($row[text],0,2) == 'IP') {
        echo "<td>$row[text]</td>".PHP_EOL;
}
    elseif ($row[text] == "") {echo "<td>".PHP_EOL; echo "</td>".PHP_EOL;
}

    else {       

        echo "<td><a href='/$row[file]' target='_blank'"?> onclick="_gaq.push(['_trackEvent', 'Downloads', 'Quality', '<?php                            
        echo "$row[text] | $row[class]"?>']);"><? echo "$row[text]</a></td>".PHP_EOL;
}

    if ($cntr % $nRows == 0) {echo "</tr>".PHP_EOL;}
     elseif ($cntr % 9 == 0) {
      echo "</tr>".PHP_EOL; echo "<tr>".PHP_EOL;}
}
echo "</tbody>".PHP_EOL;
echo "</table>".PHP_EOL; 
$dbCon = null;
?>

最佳答案

为什么不像输出表中显示的那样构建数据库,其中每行/记录都有九个“属性”(可能会或可能不会填充数据)。

这可能会使您的数据库表具有如下字段:

id
facilities
star_line
star_line_ex
amphe_ex
... etc.

通过这种方式,您的表格可以更好地模拟您尝试使用的“现实世界”记录。

这也将大大简化将数据库表日期读取到单独记录中的过程。

关于来自非连续行的按列的 PHP 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40219969/

相关文章:

php - 从 PHP 数组中删除随机项

php - 如何在 php codeigniter 中为我的网页制作一个唯一访问者计数器?

mysql - 什么更好 : joins or multiple sub-select statements as part of one query

php - PDO:数据库离线时连接超时

php - 从 php 函数中检索额外变量

php - 无法使用运行 MAMP/PHP 5.6.1/Mac OS X El Capitan 的 putenv() 修改 PATH

mysql - 如何通过字符串中嵌入的数字对 mySQL 列进行排序?

PHP 代码不通过批处理文件运行

mysql - 在大型 MySQL 表之间传输数据

php - 重置新密码,token变空