我有一个小的Spring Boot应用程序,该应用程序管理一些项目和客户端。 客户有一个国家(是一个实体),当用户要创建/更新其客户以从UI中的预定义国家/地区选择列表中进行选择时,我想让该用户使用。 如果该国家/地区不在列表中,则用户应选择“其他”,直到管理员将添加新国家/地区。 唯一的问题是,该“其他”值必须始终位于选择列表的末尾,而其他国家/地区则应按字母顺序排序。如果按字母顺序对列表进行排序,则“ Other”值将位于中间位置。 如何才能有效地做到这一点(Java和DB)? 我现在正在使用JPA储存库findAll用于国家/地区。 第一个想法是为每个国家/地区添加一个索引,然后将“ Other”的值设置为较大值,因此我将按索引进行排序。但是,如果插入完成了...。我不知道如何更新其他值。
编辑: Jens Schauder解决方案成功了!
答案 0 :(得分:3)
添加一个订购列,我现在称之为sortorder
。默认情况下,将其填充为0
,对于特殊的“其他”国家,则填充为999
。
然后按sortorder
和国家/地区名称排序。
答案 1 :(得分:0)
Java方式
假设它是一个基于字符串的简单数组列表
DB方式
Select countryname from countryTable order by countryname union select other from dual
请注意,语法nd的方法会根据您选择的数据库而有所不同,但是抽象的想法仍然相同
答案 2 :(得分:0)
我建议您将isOther
字段添加到您的属性/表中,并按两个字段/列isOther
然后按name
排序。
答案 3 :(得分:0)
您可以按排序的顺序从数据库中读取数据,并使用union
将其他添加到结果集中(如果表中还存在其他):
select * from country where name <> 'others' order by name
union
select * from country where name = 'others'
如果表中没有不其他人,则您想手动添加(在mysql
中)
select * from country order by name
union
select 'others';
如果您使用的是java
,为什么不假设最后以list
的顺序从表中读取数据,最后只添加 others 到您的sorted
中。
希望有帮助