PHP遍历UNION ALL查询结果 为每个分类最后条目添加单次自定义跳转链接
代码实现方案
核心调整思路:在分类块的边界位置输出跳转链接,不再每遍历一行就重复输出。需要覆盖两个跳转触发场景:
- 遍历到新分类的第一行时,说明上一个分类的所有条目已经输出完成,此时补上上一个分类的跳转链接
- 整个循环遍历全部结束后,最后一个分类没有后续的新分类触发跳转逻辑,需要单独补上它的跳转链接
配套SQL优化
为了避免数据库返回结果打乱分类块的顺序,保证同分类数据连续相邻,可以给查询加统一的排序标识:
SELECT 1 AS block_order, * FROM table WHERE category = 1 LIMIT 10 UNION ALL SELECT 2 AS block_order, * FROM table WHERE category = 2 LIMIT 6 UNION ALL SELECT 3 AS block_order, * FROM table WHERE category = 3 LIMIT 11 ORDER BY block_order
注意:如果不加排序,部分数据库环境下可能出现同分类数据被拆分穿插的情况,导致分类判断逻辑失效。
修正后的PHP代码
$c = ""; foreach ($query as $row) { // 检测到分类切换,先完成上一个分类的收尾跳转 if ($c !== "" && $c != $row['category']) { echo "<a href='/category/{$c}'>Go to category {$c}</a><br>"; } // 进入新分类,输出分类标题 if ($c != $row['category']) { echo "Category " . $row['category'] . "<br>"; $c = $row['category']; } // 输出当前条目 echo "- " . $row['item'] . "<br>"; } // 循环结束,补上最后一个分类的跳转链接 if ($c !== "") { echo "<a href='/category/{$c}'>Go to category {$c}</a><br>"; }
效果验证
代码运行后输出的结构完全匹配预期:
Category 1 - Item 1 - Item 2 - Item 3 Go to category 1 Category 2 - Item 4 - Item 5 Go to category 2 Category 3 - Item 6 Go to category 3
内容的提问来源于stack exchange,提问作者Kolasac
相关产品推荐
相关产品推荐

