0

不确定该主题是否适合该问题。

我有一个表格,其中包含一些带有年份信息的数据,如下所示。

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 表中获取某些 id 的数据。但是我需要显示某些年份范围内的记录,例如过去 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 循环来尝试我的解决方案。并且没有按我的意愿工作。

和想法?

4

1 回答 1

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>';

}
于 2012-09-07T11:53:51.663 回答