排序设置

本文介绍了一种在SQL中实现记录排序字段自增的方法,通过创建触发器在插入记录时自动更新排序字段,确保其始终等于记录ID,从而简化了文章或产品管理系统的排序逻辑。

很多文章管理系统、产品管理系统对文章列表的排序方式一般只提供置顶、按id排序等,但很多时候需要对某一条记录设置个性化的排序(排在任意位置),系统却没有提供此功能

 

可以考虑的实现方法是增加一个排序字段[seq],并使seq的默认值为记录的id, order by的时候先 看是否置顶,再比较seq,然后在比较id

 

但如何在插入记录时就使seq=id呢,insert语句是没有提供这个功能的。

 

1、比较土的方法是手工操作,建一个按钮“追加排序值”,调用一个非常简单的sql语句,update article set seq=id where seq is null

 

2、比较理想的方法是通过触发器在插入时候赋值:

 

 

 

DELIMITER $$
DROP TRIGGER  IF EXISTS  `set_seq`$$
CREATE
    TRIGGER `set_seq` before INSERT
    ON `article`
    FOR EACH ROW BEGIN
      select max(article_id)+1 into @id from article;
      set new.seq =@id;
    END$$

DELIMITER ;

 

 

 

使用before而不使用after,因为after的话new就没有用了

使用select max(article_id)+1 into @id from article; 而不使用last_insert_id(),因为:

For MyISAM and BDB tables you can specify AUTO_INCREMENT on a secondary column in a multiple-column index. In this case, the generated value for the AUTO_INCREMENT column is calculated as MAX(auto_increment_column) + 1 WHERE prefix=given-prefix.
所以不能用triger里面的new.id 也不能用last_insert_id() 只能想到取此表中的最大id加1

<think>好的,用户想了解如何在ag-Grid中设置排序。我之前看过一些相关的引用资料,需要整理一下。首先,引用[1]提到AG-Grid的列排序机制,用户可能需要配置列的排序属性。引用[2]则涉及客户端排序设置。 首先,我应该从基本配置开始。列定义的sortable属性设为true可以让列支持排序。比如在列定义中添加{ field: 'name', sortable: true }。然后,初始排序状态可以通过sort和sortIndex来设置,比如初始按name升序排列。 接下来是事件处理部分。当用户点击列头排序时,需要监听sortChanged事件,获取当前排序状态并保存。比如使用onSortChanged事件处理函数,调用gridApi.getSortModel()获取排序模型,然后保存到本地存储或服务器。 然后要考虑如何保存和恢复用户设置。用户可能希望在下次访问时保持之前的排序状态,这可以通过在初始化时设置sortModel来实现,比如gridOptions.initialSort = savedSortModel。 另外,引用[2]提到客户端排序,可能需要设置enableServerSideSorting为false,让排序在客户端进行。这对于大数据量或分页的情况可能不太适用,但适用于本地数据。 用户可能还关心多列排序,ag-Grid默认支持,按住Shift点击列头即可添加多个排序条件。排序模型是一个数组,包含多个排序状态。 最后,要记得在示例代码中展示这些配置,比如列定义、初始化排序、事件处理和恢复设置的方法。同时,相关问题可以引导用户进一步了解性能优化、服务端排序和保存用户设置的方法。</think>在AG-Grid中设置排序主要通过列定义配置和网格选项实现,以下是具体步骤与代码示例: ### 一、基础列排序配置 1. **启用列排序** 在列定义中设置`sortable`属性: ```javascript const columnDefs = [ { field: 'name', sortable: true, // 启用排序 sort: 'asc' // 初始排序方向(可选) }, { field: 'age', sortable: true } ]; ``` 2. **初始排序状态** 通过网格选项设置初始排序: ```javascript const gridOptions = { defaultColDef: { sortable: true // 全局启用排序 }, columnDefs: columnDefs, initialSort: [ { colId: 'age', sort: 'desc' } // 初始按age降序排列 ] }; ``` ### 二、高级排序控制 1. **自定义排序逻辑** ```javascript { field: 'customField', comparator: (valueA, valueB) => { return valueA.length - valueB.length; // 自定义字符串长度排序 } } ``` 2. **服务端排序配置** ```javascript gridOptions = { enableServerSideSorting: true, // 启用服务端排序 onSortChanged: (event) => { const sortModel = event.api.getSortModel(); // 发送排序参数到服务端[^2] } } ``` ### 三、排序状态保存与恢复 1. **获取当前排序状态** ```javascript const currentSort = gridOptions.api.getSortModel(); // 示例输出:[{ colId: 'age', sort: 'desc' }] ``` 2. **恢复排序状态** ```javascript // 从localStorage读取保存的设置 const savedSort = JSON.parse(localStorage.getItem('gridSort')); gridOptions.api.setSortModel(savedSort); // 或在初始化时设置 gridOptions.initialSort = savedSort; ``` ### 四、排序事件监听 ```javascript // 监听排序变化事件 gridOptions.onSortChanged = (event) => { const sortColumns = event.columnApi.getColumnState() .filter(col => col.sort) .map(col => ({ colId: col.colId, sort: col.sort })); localStorage.setItem('gridSort', JSON.stringify(sortColumns)); }; ``` ### 五、多列排序配置 AG-Grid默认支持多列排序(按住Shift键点击列头),可通过以下方式控制: ```javascript gridOptions.suppressMultiSort = false; // 默认允许多列排序 ``` > **最佳实践建议**:对于需要持久化的场景,建议将`getSortModel()`返回的排序状态与列位置、宽度等设置一起保存[^1]。服务端排序时需禁用内置排序逻辑,通过回调处理数据请求[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值