mysql按照二级分类查询指定数量内容
分类表:
CREATE TABLE `category` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '分类名称',
`parent_id` int DEFAULT NULL COMMENT '父ID',
`sort` int DEFAULT NULL COMMENT '排序',
`status` int DEFAULT '0' COMMENT '状态:0-显示,1-不显示',
PRIMARY KEY (`id`) USING BTREE
)
内容表:
CREATE TABLE `site` (
`id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`one_category_id` int DEFAULT NULL COMMENT '一级分类ID',
`two_category_id` int DEFAULT NULL COMMENT '二级分类ID',
`three_category_id` int DEFAULT NULL COMMENT '三级分类ID',
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '名称',
`address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '地址',
`label` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '标签',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `address` (`address`)
)
内容表中的一、二、三级分类ID,都是存的分类表的ID。
现在需要根据二级分类从内容表中查询出每个二级分类下8条内容,最终展示效果如下:
我的逻辑如下
1.子查询 sub:使用窗口函数 ROW_NUMBER() 对每个 two_category_id 进行分区,并按 id 排序。
2.主查询:选择窗口函数 ROW_NUMBER() 小于等于 8 的记录。