【问题标题】:mysql to html display values for the same value columnmysql to html显示相同值列的值
【发布时间】:2018-06-10 21:40:15
【问题描述】:

我无法获得正确的输出。我有一张这样的桌子:

我正在使用以下 PHP 代码来创建表格:

<?php 
include_once("includes/dbh.inc.php");
if(isset($_POST["r_id"])){
    $output = '';

    $query = "SELECT * FROM relatorioc WHERE datas = '".$_POST["r_id"]."'";
    $res = mysqli_query($conn, $query);

    $output .='
    <div class="table-responsive">
        <table class="table table-bordered">';

        while($row = mysqli_fetch_array($res)){                
            $output .= '
                `<tr>
                    <td>'.$row['linha'].'</td>
                    <td>'.$row['user'].'</td>
                    <td>'.$row['prob'].'</td>
                    <td>'.$row['res'].'</td>
                    <td>'.$row['timep'].'</td>
                    <td>'.$row['timei'].'</td>
                </tr>';
        }
        $output .= "</table></div>";
        echo $output;    
}

【问题讨论】:

  • 提示:$data = []; while($row = mysqli_fetch_assoc($res)){ $data[$row['linha']][] = $row; } var_export($data)
  • 好的,我可以看到 $data 上的所有数据,但是如何使用我想要的数据?因为我的目标是构建标题为“linha”的表格并使用关联值填充它。
  • 我现在快到了,我的表中有这个:来自第一个“linha”的 Linha 数据来自第二个“linha”的 Linha 数据问题是每个 linha 只显示一行我想显示每个“Linha”拥有的所有行。

标签: php mysql html-table


【解决方案1】:

在我回答您的问题之前,请务必注意您的代码中存在明显的安全漏洞,即SQL Injection:在进入 SQL 查询之前您不会转义输入。 ($_POST["r_id"])

现在对于您的问题,我所做的只是创建一个数组,并在 while 循环中输入按“linha”分组的行,然后使用两个 foreach 输出。我还在 SQL 查询中为您转义了输入。 (mysqli_real_escape_string)

if (isset($_POST["r_id"])) {
    $output = '';

    $query = "SELECT * FROM relatorioc WHERE datas = '" . mysqli_real_escape_string($conn, $_POST["r_id"]) . "'";
    $res = mysqli_query($conn, $query);

    $data = [];

    while ($row = mysqli_fetch_array($res)) {
        $data[$row['linha']][] = $row;
    }

    $output .= '';

    foreach ($data as $linha => $items) {
        $output .= '<p>' . $linha . '</p>';
        $output .= '
        <div class="table-responsive">
            <table class="table table-bordered">';

        foreach ($items as $row) {
            $output .= '
            <tr>
                <td>' . $row['linha'] . '</td>
                <td>' . $row['user'] . '</td>
                <td>' . $row['prob'] . '</td>
                <td>' . $row['res'] . '</td>
                <td>' . $row['timep'] . '</td>
                <td>' . $row['timei'] . '</td>
            </tr>';
        }

        $output .= '</table></div>';
    }

    echo $output;
}

【讨论】:

  • 非常感谢!!如果我想将日期添加为每个 linha 的标题?我可以做两个while循环吗?
  • @AlexandreAlves 你是什么意思?你想在“linha”标题旁边写一些日期吗?还是您想按日期而不是“linha”分组?
【解决方案2】:

您需要先进行“分组”查询,然后再进行其他与 col 分组的查询,如果您没有很多 Mysql 经验,其他更复杂的查询也是可能的。

(在第一个查询中按 'linha' 分组,在其他查询之前分组(第一个结果是 ='linha' 值)

select * from relatorioc datas = '".$_POST["r_id"]."'"; group by 'linha' 前 : $query = "SELECT * FROM relatorioc WHERE datas = '".$_POST["r_id"]."'" and linha= 'previous result';

这对你来说很容易解决。

【讨论】:

  • 你能解释得更好吗?你的意思是 $query2 = "SELECT * FROM relatorioc GROUP BY linha"; $res2 = mysqli_query($conn, $query2); $query = "SELECT * FROM relatorioc WHERE datas = '".$_POST["r_id"]." AND linha = '$res2'"; $res = mysqli_query($conn, $query);
  • 你先制作:
【解决方案3】:

首先根据您的需要对结果进行分组查询->:

select * from relatorioc datas = '". $ _ POST [" r_id "]."' "; group by 'linha' with it will provide the necessary data to the following query ->: $ query = "SELECT * FROM relatoryc WHERE datas = '". $ _ POST ["r_id"]. "'" and linha = 'previous result';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-08
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    • 2019-03-17
    • 1970-01-01
    • 1970-01-01
    • 2016-01-05
    相关资源
    最近更新 更多