从上图中,我试图用PHP动态生成这个表。下面是我在mysql DB中的表
以下是我用来从数据库中提取数据的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;
这将返回需要的数据,但我正在努力弄清楚如何构建表。我正在考虑使用数组,当我拥有所需的所有数据时,然后回显表代码。我需要注意的是,测试并不总能保证测试有三个日期。感谢您的帮助。
答案 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> </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>"]
格式打印其余项目。