2012-09-07 60 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