CodeIgniter中按年份降序展示PDF文档的问题求助
解决CodeIgniter中PDF文档按年份降序分组展示的问题
第一步:修正数据库查询逻辑
如果你的pdf_date字段是日期/时间类型(比如DATE、DATETIME),需要先提取年份再排序:
// 在Model中编写查询 $this->db->select('*, YEAR(pdf_date) as pdf_year'); // 提取年份作为独立字段 $this->db->order_by('pdf_year DESC'); // 按年份降序排列 $query = $this->db->get('your_pdf_table'); return $query->result();
如果pdf_date是字符串类型(直接存储"1983""2020"这类年份),需要强制转换为数值后排序:
$this->db->order_by('CAST(pdf_date AS UNSIGNED) DESC'); $query = $this->db->get('your_pdf_table'); return $query->result();
第二步:修正视图分组展示逻辑
拿到排序后的数据集后,在视图中按年份分组,直接遍历即可保证顺序:
<?php // 按年份分组存储数据 $pdfs_by_year = []; foreach ($pdf_list as $pdf) { $year = isset($pdf->pdf_year) ? $pdf->pdf_year : $pdf->pdf_date; if (!isset($pdfs_by_year[$year])) { $pdfs_by_year[$year] = []; } $pdfs_by_year[$year][] = $pdf; } // 按降序年份展示分组内容 foreach ($pdfs_by_year as $year => $pdfs) { echo "<h3>{$year}</h3>"; echo "<ul>"; foreach ($pdfs as $pdf) { echo "<li><a href='{$pdf->pdf_url}'>{$pdf->pdf_name}</a></li>"; } echo "</ul>"; } ?>
常见排查点
- 确认
pdf_date字段存储格式:日期类型要保证是完整4位年份,字符串类型避免存"83"这类不规范格式。 - 检查Model中是否有其他
order_by语句覆盖当前排序,可使用$this->db->reset_query()清空之前的查询规则后再执行新排序。
内容的提问来源于stack exchange,提问作者Hamza Zafeer
相关产品推荐
相关产品推荐

