GWA2吉娃兔引入PNOO关于排序字段的顺序

距离2022年06月上一篇Blog差不多过去一个月了( UfqiFina有福金融更新:JavaScript的数据类型强制等, https://ufqi.com/blog/ufqifina-javascript-tofixed/ )。

GWA2吉娃兔在研发与部署中,持续改进升级优化,日益健壮强大。近期的一个主要改进升级是在Page Navigator分页导航模块引入了PNOO关键词。
PNOO, Page Navigator Order of multiple Order-by fields, 分页导航中的排序字段的顺序。

之前的组合配对关键词 PNOB,
PNOB, Page Navigator Order By , 分页导航中的某个排序字段,
之前的组合配对关键词PNSK,
PNSK, Page Navigator Search Key, 分页导航中的搜索字段,
之前的组合配对关键词OPPNSK,
OPPNSK, Operator of PNSK, 分页导航中的某各搜索字段的操作符.

问题的背景是,当我们使用 GWA2中的Page Navigator模块通过地址栏的请求参数进行数据库SQL查询语句的组装时,除了使用构造条件的 PNSKxxx=yyy 这样的关键词, OPPNSKxxx=yyy 这样的操作符,还会使用到 PNOBxxx=0|1 这样的条件来设置查询结果的排序。相关参考: GWA2吉娃兔🐇升级增加搜索模糊语法支持, https://ufqi.com/blog/gwa2-fuzzy-search/   。

PNOBxxx=0|1 会最终映射到数据库SQL查询语句中的 order by xxx 。 由于地址栏请求的参数是以Hash列表方式从客户端传递到服务器端,所以当有两个以上的排序条件时,Hash列表的数据并不能区分出先后关系来。相反地,在数据库SQL语句中, order by xxx, yyy 和 order by yyy, xxx 是有明显先后顺序区别的。前者是针对结果集先按xxx进行某种排序,然后在这个基础上再按yyy进行排序,后者则刚好相反。

如此以来,GWA2吉娃兔的Page Navigator需要某种机制,在处理多个排序条件时,确需知道这些排序字段的先后顺序。鉴于Hash列表数据无法确保先后顺序,我们考虑引入一个新的关键词 PNOO 来完成这一任务。
在前端地址栏发起请求时,如果指定了多个排序条件,需要额外地通过 PNOO来指明这些排序条件的先后顺序,也即,
pnobfielda=1&pnobfieldb=0&pnobfieldc=1&pnoo=fielda,fieldb,fieldc

这各请求将构造一个如下的SQL排序语句,
order by fielda desc, fieldb, fieldc desc

如果不启用 pnoo 参数进行指定顺序,则Page Navigator按Hash列表默认的顺序执行,向前兼容所有版本。
目前,这一优化改进已经在 GWA2 Java 和 GWA2 PHP 中实施,在随后的版本中,开发者可以调用PNOO来设置在多个排序字段条件下的各个字段的先后顺序。
在代码层面的实现逻辑是,在mod/PageNavi.class 中的 getOrder 里,增加先检查当前请求是否包含、预设了 PNOO, 如果没有预设,说明是之前的老旧版本,不支持新功能 PNOO,排序按默认顺序执行。
如果检测到包含、预设了PNOO,则说明是新版本,有对PNOO的支持,进一步地拆解出带顺序的排序字段,然后顺序执行、安排排序字段的升降设置。

题外1.
实际应用开发中,多个排序条件同时使用的场景并不多,而且其效果也并不明显。比如按价格排序之后再按重量排序,或者反过来,按重量排序之后再按价格排序,这样的结果集与只使用其中一个排序条件来看,差别并不特别明显。细微之处只在于价格相同时,再看重量的大小。多数情况下,价格与重量是正相关或者负相关很强的两个字段。大概只有在两个不相关的排序字段组合下,效果才会明显一些。

题外2.
数据库SQL查询语句 order by 有时候需要按条件地组合排序字段,比如根据数据的状态字段决定排序是按Id、状态本身、创建时间或者更新时间等。例如,

… ORDER BY
CASE
WHEN ali.LIVE_STATUS IN ( 0, 1 ) THEN
ali.LIVE_STATUS
END DESC,
CASE
WHEN ali.LIVE_STATUS = 3 THEN
ali.LIVE_START_TIME
END ASC,
CASE
WHEN ali.LIVE_STATUS = 2 THEN
ali.CREATE_TIME
END DESC

题外3.
始于2022年02月24日俄罗斯侵略乌克兰的战争还在持续,好消息是英勇的乌克兰人还在顽强地抵抗入侵者,国际支援与志愿军还在源源不断地涌入抗战一线,坏消息是乌克兰实际上丢失了一小部分边境领土。叠加上英国首相约翰鲍里斯因幕僚诚信问题被迫宣布即将下野,日本前首相安倍晋三因不明原因在竞选演说中遇袭身亡,民主自由世界蒙受了极大的损失,遭遇到巨大的挑战。
道长且阻,行则将至。

除了键盘侠打嘴炮,我们还可以真金白银地支持发生在乌克兰的自由与奴役相对决的反侵略战争。捐助乌克兰网站: United24 - The initiative of the President of Ukraine .

题外4.
如果一切顺利,yoyo将完成初中学业,从东北师大附中朝阳学校以优异成绩毕业,荣获北京市三好学生称号,即将在2022年秋天入读清华大学附中朝阳学校(高中校)。
Hanu将毫无悬念的从二年级结业,在2022年秋季开始小学三年级的打怪升级之路。

全文首发地址: https://ufqi.com/blog/gwa2-pagenavi-pnoo/ , -R/x12Sc


GWA2吉娃兔

-GWA2 吉娃兔 是”通用网络应用架构( General Web Application Architecture, https://ufqi.com/dev/gwa2/ )”,基于 -GWA2 可以轻便构建各种网络应用程序,
包括复杂的在线购物商城、在线医疗、在线教育、 旅游交易平台、社群或者社交网站和新闻资讯网站等,
也包括各种企事业单位网上门户,在线交互及服务作业系统等.
还可以包括为NativeApp做服务器端支持, 甚至是WebApp的全部.
-GWA2 是为数不多的支持跨开发语言的应用框架,目前支持 -Java, -PHP, -Perl, -Aspx and -Python .

-GWA2 is a “General Web Application Architecture” and based on -GWA2 developers can easily build a variety of network applications,
including complex online shopping malls, online medical services, online teaching, travel trading platforms, community or social networking sites and news information sites, etc.
Also the applications include various online portals of enterprises and institutions, online interaction and service operations systems.
Moreover it contains server-side support for Native App, or even all of the WebApp.
-GWA2 is one of the web frameworks which provide cross-language support for -Java, -PHP, -Perl, -Aspx and -Python at present.

-GWA2 is E.A.S.Y 
Easy Along, Swift Yield
轻松启动, 快速产出.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值