-- ============================================================ -- 商品表新增「置顶」字段 is_top,并调整默认排序(方案 B) -- ------------------------------------------------------------ -- 约定说明(依据本项目代码 /Users/gxwebsoft/VUE/guilixu-admin): -- 1. is_top = 1 表示置顶,0(默认)表示不置顶 -- 2. 表名/字段名 snake_case 约定(Node + TypeORM 常见); -- 若你的库列名是驼峰(goodsId / isTop),请自行替换 -- 3. 与 recommend(推荐)同为「列表内联一键切换」的布尔开关 -- 4. 混合排序思路:置顶的永远在最前;置顶内部按排序号升序; -- 其余商品按创建时间倒序(绝大多数商品无需手动排) -- ============================================================ -- 第一步:新增字段(已存在则跳过;MySQL 5.7 / 8 通用) ALTER TABLE shop_goods ADD COLUMN is_top TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否置顶:1置顶 0不置顶'; -- (可选)联合索引,置顶 + 排序号分页查询更稳 -- ALTER TABLE shop_goods -- ADD INDEX idx_is_top_sort (is_top, sort_number); -- 第二步:调整分页查询(page 接口)默认排序 -- 原(示例):ORDER BY create_time DESC -- 改: ORDER BY is_top DESC, sort_number ASC, create_time DESC -- 说明:若后端排序字段来自前端 orders 参数,需放开 is_top / sort_number 参与排序 -- (前端「置顶」「排序号」列已开启 sorter,会向后端传 orders) -- 第三步(验证):确认字段已加、数据默认 0,且排序符合预期 SELECT goods_id, name, is_top, sort_number, create_time FROM shop_goods ORDER BY is_top DESC, sort_number ASC, create_time DESC LIMIT 20;