在过去的一个月里,我一直在创建一个基准测试系统,允许用户添加类别&基准测试项目,该测试项目在特定年份内每周保留数据。我无法创建一个mysql语句,该语句在每年的所有星期内显示每个基准项目的结果,即使那一周没有数据或一年中没有数据。以下是我一直在测试的查询和表格列。我正在使用codeigniter,并计划以底部显示的格式显示结果。我为这篇冗长的描述道歉,但我试图尽可能清楚。任何帮助将不胜感激。MYSQL-在循环周结束日期时显示数据
tblbenchmarkitem
=================
itemID | itemDescription | itemTarget | ItemFreq | FKcategoryID
tblbenchmarkData
================
dataID | FKitemID | resultDate | result | dateAdded | dateModified
tblcategories
===============
categoryID | categoryName | parentID | FKdeptID
tblcalendardates - stores 52 weeks for year Saturday to Friday
================
id | year | startDate | endDate
这些是我在模型中的mysql语句。我将在该年的函数参数中设置一个默认值。
public function get_data() {
$dates = $this->db->query("SELECT endDate FROM tblcalendardates WHERE year = '2014' ORDER BY endDate");
$dates = $dates->result();
foreach ($dates as $date) {
//$query = "SELECT tblcalendardates.enddate, tblbenchmarkitems.itemDescription, tblbenchmarkitems.itemTarget, tblbenchmarkitems.itemFrequency, tblbenchmarkdata.resultDate, IFNULL(tblbenchmarkdata.result,0) AS result, (SELECT strCategoryName FROM tblcategories WHERE tblbenchmarkitems.FKcategoryID = tblcategories.categoryID) AS category FROM tblbenchmarkdata LEFT JOIN tblbenchmarkitems ON tblbenchmarkdata.FKitemID = tblbenchmarkitems.itemID JOIN tblcalendardates WHERE DATE(tblbenchmarkdata.resultDate) BETWEEN (SELECT MIN(DATE(tblcalendardates.startdate)) FROM tblcalendardates WHERE tblcalendardates.year = " . date('Y') . ") AND (SELECT MAX(DATE(tblcalendardates.enddate)) FROM tblcalendardates WHERE tblcalendardates.year = " . date('Y') . ") GROUP BY category ORDER BY tblcalendardates.enddate";
$query = 'SELECT c.*, i.itemDescription, i.itemTarget, IFNULL(d.result, 0) as result,"' . $date ->endDate . '" FROM tblcategories AS c JOIN tblbenchmarkitems AS i ON i.FKcategoryID = c.categoryID JOIN tblbenchmarkdata as d ON i.itemID = d.FKitemID JOIN tblcalendardates WHERE DATE(d.resultDate) BETWEEN (SELECT MIN(DATE(tblcalendardates.startdate)) FROM tblcalendardates WHERE tblcalendardates.year = "' . date('Y') . '") AND (SELECT MAX(DATE(tblcalendardates.enddate)) FROM tblcalendardates WHERE tblcalendardates.year = "' . date('Y') . '") GROUP BY strCategoryName';
$query = $this->db->query($query);
return $query->result();
}
}
这在我看来是
<table class="table table-hover data-list">
<thead>
<tr>
<th class="th-set-width1">Benchmark Item</th>
<th class="th-set-width2">Target</th>
<?php foreach($weeks as $week): ?>
<th class="th-set-width2"><?php echo date('m-d-Y', strtotime($week->enddate)); ?></th>
<?php endforeach; ?>
</tr>
</thead>
<tbody>
<?php foreach($entries as $entry) : ?>
<tr>
<td><?php echo $entry->itemDescription; ?></td>
<td><?php echo $entry->itemTarget; ?></td>
<?php for ($i = 0; $i < 52; $i++) : ?>
<?php if ($entry->result != NULL || $entry->result > 0): ?>
<td><?php echo $entry->result; ?></td>
<?php else: ?>
<td>0</td>
<?php endif; ?>
<?php endfor; ?>
</tr>
<?php endforeach; ?>
</tbody>
</table>
这是我想在一个表格中显示的数据。
-----------------------------------------------------------------------------------
categoryName
====================================================================================
itemDescription | itemTarget | 01-03-14 | 01-10-14 | 01-17-14 | 01-24-14 | 01-31-14
=====================================================================================
No. of Visits | 12.00 | NULL | NULL | 15.00 | NULL | 20.00
No. of Calls | 17.00 | 12.00 | NULL | 17.00 | 22.00 | NULL