【问题标题】:Displaying mysql results on my website using datatables with dynamic headers使用带有动态标题的数据表在我的网站上显示 mysql 结果
【发布时间】:2017-09-26 17:17:11
【问题描述】:

所以我有一个我正在为工作开发的网站。它允许销售人员进入并输入日期范围和他们的姓名缩写,它会查询我的数据库并将表格连同他们的数据一起返回给他们。我提取的列数取决于他们选择的日期范围。时间段越长,列数越多(我将它每周分开,所以更多天=更多周)

我遇到的问题是,当我动态拉取列标题时,使用从 mysql 查询中获取标题的 for 循环,以便它是动态的,我不必为他们可以选择的每周编写每个案例,标题替换了我表中的第一项,所以我丢失了 1 行。

我想知道是否有人在动态获取 mysql 查询集的列标题并将它们与数据表一起使用方面有任何经验?

我不想粘贴大量代码并将这篇文章归为一类,因此请告诉我您希望看到的内容,我会提供。

提前感谢您的所有帮助,我希望我不会对我的问题感到困惑。

以下是代码示例:

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "";

$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("Connection Failed: " . $conn->connect_error);
}

$sql = "SELECT * FROM sampleTable";

$result = $conn->query($sql);
$conn->close();
?>

<div class="card mb-3">
    <div class="card-header">
        <i class="fa fa-table"></i></div>
    <div class="card-body">
        <div class="table-responsive">
            <table class="table table-bordered" id="adminTable" width="100%" cellspacing="0">
                <thead>
                    <?php
                    if ($result->num_rows > 0) {
                        echo "<tr>";
                        foreach(array_keys($result->fetch_assoc()) as $field){
                            echo "<th>" . $field . "</th>";
                        }
                        echo "</tr>";
                    } else {
                        echo "<h1 align=\"center\">No Results Found</h1>";
                    }
                    ?>
                </thead>
                <tbody>
                    <?php
                    if ($result->num_rows > 0) {
                        while($data = $result->fetch_assoc()) {
                            echo "<tr>";
                            foreach ($data as $field => $value){
                                echo "<td>" . $value . "</td>";
                            }
                            echo "</tr>";
                        }
                    }
                    ?>
                </tbody>
            </table>
        </div>
    </div>
    <div class="card-footer small text-muted">Updated yesterday at 11:59 PM</div>
</div>

<!--Not included in current file - included in base php-->
<script type="text/javascript">
    $('#dataTable').DataTable( {
        "scrollX": true,
        "scrollY": '55vh',
        "scrollCollapse": true,
        "paging": false,
        dom: 'iftB',
        buttons: [
        'copy', 'csv', 'excel', 'pdf', 'print'
        ]
    } );
</script>

【问题讨论】:

  • 需要向我们展示代码。您是在 1 个查询中获取所有内容(标题 + 正文)还是单独进行?我将从 2 个单独的查询开始,然后将它们组合起来。
  • @waterloomatt 我发布了代码,我在一个查询中执行它,但我已经在两个单独的查询中尝试过它,它仍然产生了同样的问题。
  • 这个任务的通用术语是pivoting你的表。

标签: javascript php html mysql datatables


【解决方案1】:

只需将第一次提取的结果放入变量中,然后在提取其他行之前将其回显:

 <table class="table table-bordered" id="adminTable" width="100%" cellspacing="0">
            <thead>
                <?php
                if ($result->num_rows > 0) {
                    echo "<tr>";
                    $firstRow = $result->fetch_assoc();
                    foreach(array_keys( $firstRow ) as $field){
                        echo "<th>" . $field . "</th>";
                    }
                    echo "</tr>";
                } else {
                    echo "<h1 align=\"center\">No Results Found</h1>";
                }
                ?>
            </thead>
            <tbody>
                <?php
                if ($result->num_rows > 0) {
                        echo "<tr>";
                        foreach ($firstRow as $field => $value){
                            echo "<td>" . $value . "</td>";
                        }
                        echo "</tr>";

                    while($data = $result->fetch_assoc()) {
                        echo "<tr>";
                        foreach ($data as $field => $value){
                            echo "<td>" . $value . "</td>";
                        }
                        echo "</tr>";
                    }
                }
                ?>
            </tbody>
        </table>

【讨论】:

    【解决方案2】:

    $result-&gt;fetch_assoc() 不会将结果集推进到下一行,但您可以通过$result-&gt;data_seek(2) 手动触发它。在输出标题行后执行此操作。

    http://php.net/manual/en/mysqli-result.data-seek.php

    但同样,您可能应该将其分成 2 个查询或在结果集中有一个标志,告诉您这是标题行还是正文行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-27
      • 2012-10-15
      • 1970-01-01
      • 2012-05-23
      • 2012-11-25
      • 2021-09-02
      • 1970-01-01
      相关资源
      最近更新 更多