从SQL查询生成HTML表

时间:2013-09-30 21:56:02

标签: php mysql

Results

从上图中,我试图用PHP动态生成这个表。下面是我在mysql DB中的表

MySQL Table MySQL Table 2

以下是我用来从数据库中提取数据的SQL

SELECT DISTINCT execution_date,class_name,method_name,status FROM test_cases INNER JOIN test_case_executions ON test_cases.id=test_case_executions.test_case_id WHERE version='$platform' AND execution_date >= ( CURDATE() - INTERVAL 2 DAY ) ORDER BY execution_date DESC;

这将返回需要的数据,但我正在努力弄清楚如何构建表。我正在考虑使用数组,当我拥有所需的所有数据时,然后回显表代码。我需要注意的是,测试并不总能保证测试有三个日期。感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

您必须对数据集进行几次传递才能生成该输出。也就是说,您可以说4行代表所有状态值,您将不得不重复几次以提取日期列标题和“类”行标识符。

您可以在PHP中执行此操作。所以在第一遍你抓住标题的日期。并且还存储第一列的“类”。

在第二遍中,你再次迭代数据,但这次它被包裹在一个循环中,所以你可以拉出那个单元格的记录。

这是一些伪代码:

$records = $db->query("select * from your_query here...");

$dates = [];
$classes = [];

// first pass is to pull out the distinct dates & classes which represent our bounds
foreach($records AS $record) {
   $dates[] = $record['execution_date'];
   $classes[] = $record['class_name'];
}

// distinct the date set and sort them from lowest to highest
$dates = array_unique($dates);
$dates = sort($dates);
$classes = array_unique($classes);

// display the date row
echo "<tr><td>&nbsp;</td>"
foreach($dates AS $date) {
  echo $date;
}
echo "</tr>";

// start displaying each class+date pair

foreach($classes AS $klass) {
  echo "<tr>";
  echo "<td>" . $klass . "</td>";
  // display each date record for this class
  foreach($dates AS $date) {
    $class_and_date_record = filter($records, $klass, $date);
    if($class_and_date_record) {
      echo "<td>" . $class_and_date_record['status'] . "</td>";
    }
  }
  echo "</tr>";
}


function filter($records, $klass, $date) {
  foreach($records AS $row) {
    if($row['class_name'] == $klass && $row['execution_date'] == $date) {
      return $row;
    }
  }
  return NULL;
}

答案 1 :(得分:0)

如果我正确理解了你的问题,你只想在&#34; execution_date&#34;中存在值时将数据输出到表中。

$query = "SELECT DISTINCT execution_date,class_name,method_name,status FROM test_cases INNER JOIN test_case_executions ON test_cases.id=test_case_executions.test_case_id WHERE version='$platform' AND execution_date >= ( CURDATE() - INTERVAL 2 DAY ) ORDER BY execution_date DESC;";

    if ($result = $mysqli->query($query)) {

        /* fetch associative array */
        while ($row = $result->fetch_assoc()) {
            echo '<table>';
            if(isset($result["execution_date") && !empty($result["execution_date"])){
                 echo '<tr><td>' . $result["execution_date"] . '</td></tr>';
                 ...
            }
            echo '</table>';
        }

        /* free result set */
        $result->free();
    }

需要注意的一点是:

 if(isset($result["execution_date") && !empty($result["execution_date"])){

将检查返回的行是否具有值的execution_date 然后,您可以使用相同的$result["<column name>"]格式打印其余项目。