将值写入正确的月份

时间:2016-03-14 15:15:12

标签: php mysql

如何将值写入位于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 的国家/地区的订阅。

第二次查询的结果:

enter image description here

第一行的 meseAnno 列显示 2015_4 ,所以四月,但是值1是在一月插入的。为什么?

先谢谢。

enter image description here

2 个答案:

答案 0 :(得分:2)

问题是月份是12,但您的查询结果可能少于12行。 您可以更改SQL查询以获得连贯的结果,或者 - 无需修改查询 - 尝试使用以下内容:

(...)
$res = mysql_query( $sql );

$tableLine = array_fill( 1, 12, '<td>&nbsp;</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>&nbsp;</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,请花时间学习PDOmysqli_数据库扩展,   and here is some help to decide which to use