0

结果

从上图中,我正在尝试使用 PHP 动态生成此表。下面是我在 mysql 数据库中的表

MySQL 表 MySQL 表 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;

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

4

2 回答 2

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;
}
于 2013-09-30T22:07:04.253 回答
0

如果我正确理解您的问题,您只想在“execution_date”中有值时将数据输出到表中

$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>"]

于 2013-09-30T22:07:12.650 回答