2012-09-07 45 views
0

不确定主题是否适合该问题。用一些MySQL记录打印阵列

我必须保持与今年信息的一些数据如下表。

table mydata 
+----+------------+----------+ 
| id | year  | some_data| 
+----+------------+----------+ 
| 1 | 2011  | x  | 
| 2 | 2012  | y  | 
| 2 | 2009  | x  | 
| 2 | 2007  | z  | 
| 1 | 2009  | b  | 
| 3 | 2011  | a  | 
| 2 | 2007  | n  | 
| 3 | 2006  | h  | 
| 2 | 2007  | t  | 
+----+------------+----------+ 

这是我的问题。 我试图从mydata表中获取某年份的数据与年份信息。但是我需要显示某些年份的记录,例如过去6年和现在未来6年。

例如;

id = 2 

+----+------------+----------+ 
| id | year  | some_data| 
+----+------------+----------+ 
| 2 | 2007  | z  | 
| 2 | 2007  | n  | 
| 2 | 2009  | x  | 
| 2 | 2012  | y  | 
+----+------------+----------+ 

,我需要证明一样,在HTML表结构数据:

+------------+----------+ 
| year  | some_data| 
+------------+----------+ 
| 2006  |   | 
| 2007  | z  | 
|   | n  | 
|   | t  | 
| 2008  |   | 
| 2009  | x  | 
| 2010  |   | 
| 2011  |   | 
| 2012  | y  | 
| 2013  |   | 
| 2014  |   | 
| 2015  |   | 
| 2016  |   | 
| 2017  |   | 
| 2018  |   | 
+------------+----------+ 

我不知道在哪一年有重复记录和哪些年是不存在的。所以我总是尝试我的解决方案与多个查询或大量for循环。并没有按照我的意愿工作。

和想法?

回答

1

从数据库中获取排序的数据,然后通过遍历您要输出的年构建在PHP中的输出表。

例如,使用一个PDO对象$dbh

$qry = $dbh->prepare(' 
    SELECT year, some_data 
    FROM  mydata 
    WHERE year BETWEEN :start AND :end 
    ORDER BY year 
'); 

$qry->bindParam(':start', $range_start); 
$qry->bindParam(':end' , $range_end ); 

$current_year = intval(date('Y')); 
$range_start = $current_year - 6; 
$range_end = $current_year + 6; 

if ($qry->execute()) { 

    $row = $qry->fetch(); 

    echo '<table><tr><th scope="col">year</th><th scope="col">some_data</th></tr>'; 
    for ($y = $range_start; $y <= $range_end; $y++) { 
    echo "<tr><th scope=\"row\">$y</th><td><ul>"; 
    while ($row && $row['year'] == $y) { 
     echo '<li>' . htmlentities($row['some_data']) . '</li>'; 
     $row = $qry->fetch(); 
    } 
    echo "</ul></td></tr>"; 
    } 
    echo '</table>'; 

} 
+0

'$行= $ qry->取();'在while语句!不知道为什么我没有想到它。这节省了我的一天。谢谢! – tuze