【问题标题】:Printing an array with some MySQL records打印带有一些 MySQL 记录的数组
【发布时间】:2017-09-29 01:04:21
【问题描述】:

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

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

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 循环来尝试我的解决方案。并且没有按我的意愿工作。

还有什么想法?

【问题讨论】:

    标签: php html mysql html-table duplicates


    【解决方案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>';
    
    }
    

    【讨论】:

    • $row = $qry-&gt;fetch(); 在 while 语句中!不知道为什么我什至没有考虑过。这拯救了我的一天。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-23
    • 2018-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多