如何将值写入位于html表中的正确月份? 抱歉我的英语不好。
$mesi = array("January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December");
$array = $class->startEndDate('12'); // chiave arrays
echo '<table class="table table-bordered">';
echo '<thead>';
echo '<th class="text-center">Country</th>';
foreach ($mesi as $mese) {
echo '<th class="text-center">' . $mese . '</th>';
}
echo '</thead>';
echo '<tbody>';
echo '<tr>';
$query = "SELECT * FROM countries";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result)) {
echo '<td class = "text-center">' . $row['country_name'] . '</td>';
$sql = "select sum(quantity), country_id,
concat(year(date), '_', month(date)) as meseAnno
from subscription
where country_id = " . $row['country_id'] .
" group by meseAnno";
$res = mysql_query($sql);
while ($rows = mysql_fetch_assoc($res)) {
//the code here!
}
echo '</tr>';
}
echo '</tbody>';
echo '</table>';
?>
使用第二个查询,我检索ID为 country_id 的国家/地区的订阅。
第二次查询的结果:
第一行的 meseAnno 列显示 2015_4 ,所以四月,但是值1是在一月插入的。为什么?
先谢谢。
答案 0 :(得分:2)
问题是月份是12,但您的查询结果可能少于12行。 您可以更改SQL查询以获得连贯的结果,或者 - 无需修改查询 - 尝试使用以下内容:
(...)
$res = mysql_query( $sql );
$tableLine = array_fill( 1, 12, '<td> </td>' );
while( $row = mysql_fetch_assoc( $res ) )
{
$month = preg_replace( '/^\d+_(\d+)$/', '\1', $row['meseAnno'] );
$tableLine[ $month ] = "<td>{ YOUR MONTH VALUE HERE }</td>";
}
echo implode( '', $tableLine );
echo '</tr>';
(...)
首先,填充一个数组,其中包含12个空<td>
,然后 - 在while()
循环内 - 仅替换匹配的月份。
最后,你回应内爆阵列。
答案 1 :(得分:0)
使用Fusion3k的答案并应用这样的想法:如果您从数据库中选择年份和月份作为单独的列,您将以一种易于使用的方式实际获得给他的tableLine
数组的索引你可以这样做。
$sql = "select sum(quantity), country_id,
YEAR(`date`) as yr, MONTH(`date`) as mth,
concat(year(date), '_', month(date)) as meseAnno
from subscription
where country_id = {$row['country_id']}
group by meseAnno
ORDER BY mth";
$res = mysql_query( $sql );
$tableLine = array_fill( 1, 12, '<td> </td>' );
while( $row = mysql_fetch_assoc( $res ) ) {
$t = sprintf('%s_%s', $row['yr'], $row['mth']);
$tableLine[ $row['mth'] ] = "<td>$t</td>";
}
echo implode( '', $tableLine );
echo '</tr>';
如果您在搜索条件中添加yr = 2016
,则可以使用此功能。如果你想要这份报告多年,还有一些工作要做。
当然,我必须补充一下:
请不要使用the
mysql_
database extension,它 已被弃用(在PHP7中永远消失) 特别是如果您只是学习PHP,请花时间学习PDO
或mysqli_
数据库扩展, and here is some help to decide which to use