我有字段插件可以在index.gsp视图中显示我的书籍。我的图书域有一个publishedDate日期字段。
<f:table collection="${bookList}"/>
<div class="pagination">
<g:paginate total="${bookCount ?: 0}" />
</div>这个插件每次会在桌子上显示我的书10行。问题是,如果我单击“发布日期”列标题来对我的书进行排序,表中将丢失一些书籍。
我试着解决这个问题。我有8本在同一天出版的书。所以,我把书名改为1,2,3,最多8。所以,我会看看哪本书不见了。
插件在第一页显示图书1、4、2、3、5,第二页显示图书8和5。
第六册不见了。第5册在第1页和第2页两次展示。
如果我再次单击该列按降序排序我的书籍,则第二页显示书4、5、6、1,最后一页显示2、3、5、4、6。第4、第5和第6本书被展示了两次。
如果我不单击任何列对行进行排序,那么所有8本书都会显示出来,没有任何问题。
如何解决这个错误的记录问题?
发布于 2022-05-14 14:36:50
问题是,如果我单击“发布日期”列标题来对我的书籍进行排序,表中将丢失一些书籍。
没有什么好的方法可以确定你的应用程序中有什么不对劲的地方。您的应用程序很可能是配置好的,所以当您单击列标题时,会向服务器发出请求,服务器将创建一个驱动视图的模型。有许多事情可能是错误的代码。
如何解决这个错误的记录问题?
我将检查当您单击列标题和从该列返回到正在检索记录的查询时生成的模型。这很可能会凸显出当时是出了问题。
发布于 2022-05-14 20:35:12
我已经找到了问题的根源。问题在于LIMIT offset, max SQL语句。
这是我的故障排除步骤。
我在用海迪克斯。我还可以单击header来排序Heidisql中的记录。Heidisql将显示SQL语句。这是SQL。
SELECT * FROM `book` ORDER BY `published_date` ASC LIMIT 1000;这些记录按我所期望的顺序返回。因此,当我单击header列和Next按钮时,我跟踪从字段插件发送的SQL。这基本上就是插件发送给数据库的内容。
SELECT * FROM `book` ORDER BY `published_date` ASC LIMIT 10,10因此,我将此SQL复制并粘贴到Heidisql,以查看记录的外观。令人惊讶的是,所有的记录都被搞砸了。
现在我知道问题出在哪里了。我不能仅仅使用一列来排序我的记录。这就是插件发送给数据库的内容。没有足够的信息对记录进行正确的排序。ASC限制语句对这种情况下的记录进行了最佳的猜测。这就是为什么记录会出错的原因。
我将需要使插件发送超过1列,以帮助排序。
https://stackoverflow.com/questions/72237228
复制相似问题