【问题标题】:Handling IS NULL SQL parameters in geoserver在地理服务器中处理 IS NULL SQL 参数
【发布时间】:2022-01-24 05:37:51
【问题描述】:

我正在使用查询和应用样式从 geoserver 上的 postgres 数据库创建一个 SQL 层。

我想根据传入的参数创建两个层,目前我通过创建两个单独的 SQL 层来处理这个问题。

第一层:

SELECT 
    activity_group_id, activity_name, application_status_code,
    village_code, geom
FROM 
    dbt.dbt_point_primary 
WHERE 
    village_code = '%vinCode%' 
    AND attributes = '%attribute%' 
    AND application_status_code = %statusCode%

第二层:

SELECT 
    activity_group_id, activity_name, application_status_code,
    village_code, geom
FROM 
    dbt.dbt_point_primary 
WHERE 
    village_code = '%vinCode%' 
    AND attributes = '%attribute%' 
    AND application_status_code = %statusCode%
    AND activity_group_id = %activity_group_id%

通过 getMap 函数访问该层时,我正在传递 viewParams

&viewparams=vinCode:546748;statusCode:1;attribute:Farmer

&viewparams=vinCode:546748;statusCode:1;activity_group_id:19;attribute:Farmer

我在这里担心的是,我可以通过在 SQL 层中使用 ISNULL 函数将其处理为仅 1 个 SQL 层,而不是为同一预期层创建 2 个单独的层。

谁有资源可以分享?

【问题讨论】:

  • IS NULL 会出现在您的查询中吗?您可以在创建视图时使用任何有效的 Postgresql/Postgis SQL 的任何方式

标签: sql postgresql geoserver


【解决方案1】:

您可以检查您的参数是否为空,如果不使用它来过滤查询

...
AND (%activity_group_id% IS NULL OR activity_group_id = %activity_group_id%)

【讨论】:

    【解决方案2】:

    正如@JGH 所建议的,这是在地理服务器上处理 sql 查询的方式。
    SQL 层

    SELECT 
        activity_group_id, activity_name, application_status_code,
        village_code, geom
    FROM 
        dbt.dbt_point_primary 
    WHERE 
        village_code = '%vinCode%' 
        AND attributes = '%attribute%' 
        AND application_status_code = %statusCode%
        AND (%activity_group_id% IS NULL OR activity_group_id = %activity_group_id%)
    

    允许 viewparams 中的空值将正则表达式更改为 ^(?:[\w\d\s]+$)
    将视图参数传递为
    获取所有 activity_group_id
    &viewparams=vinCode:546748;statusCode:1;activity_group_id:**NULL**;attribute:Farmer
    获取 activity_group_id 的特定层
    &viewparams=vinCode:546748;statusCode:1;activity_group_id:**value**;attribute:Farmer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-30
      • 1970-01-01
      • 2019-11-25
      • 1970-01-01
      相关资源
      最近更新 更多