Ticket is https://github.com/mapserver/mapserver/issues/5490... --Steve

From: Carlos Ruiz [mailto:boolean10...@yahoo.com]
Sent: Thursday, October 12, 2017 12:55 PM
To: Lime, Steve D (MNIT) <steve.l...@state.mn.us>; 
mapserver-users@lists.osgeo.org; Sven Schroeter <schroe...@netgis.de>
Subject: Re: AW: RE: [mapserver-users] php Mapscript queryByAttributes

Sven,

This is a good workarround. It's weird why the IN operator is not working for 
Postgres but as Steve wrote, a ticket will be opened.

On Thursday, October 12, 2017, 8:04:46 AM CDT, Sven Schroeter 
<schroe...@netgis.de<mailto:schroe...@netgis.de>> wrote:


Hi Steve and Carlos,

thanks for your support.

When I understand it correctly, I can not use the IN operator in conjunction 
with queryByAttributes in Mapserver 7 (mapscript) ?
I use this function so far for the transfer of different IDs (whether integer 
or string) to read out a subset of POSTGIS tables.
I have now tried the following and it works:

$qstring = "([gid] = '1' || [gid] = '2' || [gid] = '4' || [gid] = '11')";
$query_layer->queryByAttributes("gid",$qstring,MS_MULTIPLE);

Maybe it is possible to get the IN operator back in the future?

Sven

Von: Lime, Steve D (MNIT) 
[mailto:steve.l...@state.mn.us<mailto:steve.l...@state.mn.us>]
Gesendet: Mittwoch, 11. Oktober 2017 23:33
An: Carlos Ruiz; 
mapserver-users@lists.osgeo.org<mailto:mapserver-users@lists.osgeo.org>; Sven 
Schroeter
Betreff: RE: RE: [mapserver-users] php Mapscript queryByAttributes

Ugh, my bad. At least with the LIKE operator it’s because MapServer doesn’t 
support it. Using a regex should work depending on your back-end. Which reminds 
me, which backend are you using? I need to investigate the IN operator. It 
maybe that I can come up with a work around for Sven using the native SQL that 
worked previously since that can still be set as a processing option. Will 
report back…

Steve

From: Carlos Ruiz [mailto:boolean10...@yahoo.com<mailto:boolean10...@yahoo.com>]
Sent: Wednesday, October 11, 2017 4:03 PM
To: mapserver-users@lists.osgeo.org<mailto:mapserver-users@lists.osgeo.org>; 
Sven Schroeter <schroe...@netgis.de<mailto:schroe...@netgis.de>>; Lime, Steve D 
(MNIT) <steve.l...@state.mn.us<mailto:steve.l...@state.mn.us>>
Subject: Re: RE: [mapserver-users] php Mapscript queryByAttributes

Hey Steve,

> the IN operator works off a delimited list, try queryByAttributes("gid", 
> "([gid] IN ‘100,101’)", MS_MULTIPLE);. Any whitespace > is considered part of 
> the tokens in a list.

I have tried this and it doesn't work. There's a query error because Mapserver 
try to add the following: and ("gid"'100,101')

> This is close, it’s a logical expression but you’re comparing a number 
> against a string. It should be
> queryByAttributes("municipio", "(‘[municipio]’ LIKE 'G%')", MS_MULTIPLE);

I have tried this and it doesn't work. There's a query error because Mapserver 
try to add the following: and ("municipio"::text'G%')

Maybe this happens because the MS4W version (3.1.3) with Mapserver CGI 7.0.1


On Wednesday, October 11, 2017, 2:31:41 PM CDT, Lime, Steve D (MNIT) 
<steve.l...@state.mn.us<mailto:steve.l...@state.mn.us>> wrote:


The query syntax is given in MapServer expression syntax. I think there’s a 
logical expression for why you’re seeing these results:

  queryByAttributes("gid", "gid > 100", MS_MULTIPLE) // does not found anything

is evaluated as gid = “gid > 100”. Valid but not what you’re looking for. Your 
last example is the right way to do it - queryByAttributes("gid", "([gid] > 
100)", MS_MULTIPLE);. If MapServer sees the qstring is a logical expression 
then it ignores the qitem.
  queryByAttributes("gid", "100", MS_MULTIPLE) // found one result

is evaluated as gid = 100 which makes sense.

  queryByAttributes("municipio", "'GUADALAJARA'", MS_MULTIPLE) // found one 
result

is evaluated as municipio = GUADALAJARA which makes sense. I don’t think you 
need the interior quotes around GUADALAJARA though.

  queryByAttributes("municipio", "municipio LIKE 'G%'", MS_MULTIPLE) // does 
not found anything

like the first example this evaluates as municipio = "municipio LIKE 'G%'", not 
what you want. See below…

  queryByAttributes("gid", "([gid] IN (100, 101))", MS_MULTIPLE); // query error

the IN operator works off a delimited list, try queryByAttributes("gid", 
"([gid] IN ‘100,101’)", MS_MULTIPLE);. Any whitespace is considered part of the 
tokens in a list.

  queryByAttributes("municipio", "([municipio] LIKE 'G%')", MS_MULTIPLE); // 
query error

This is close, it’s a logical expression but you’re comparing a number against 
a string. It should be queryByAttributes("municipio", "(‘[municipio]’ LIKE 
'G%')", MS_MULTIPLE);

Steve

From: mapserver-users 
[mailto:mapserver-users-boun...@lists.osgeo.org<mailto:mapserver-users-boun...@lists.osgeo.org>]
 On Behalf Of Carlos Ruiz
Sent: Wednesday, October 11, 2017 1:36 PM
To: mapserver-users@lists.osgeo.org<mailto:mapserver-users@lists.osgeo.org>; 
Sven Schroeter <schroe...@netgis.de<mailto:schroe...@netgis.de>>
Subject: Re: [mapserver-users] php Mapscript queryByAttributes

Sven,

Doing some tests, queryByAttributes does not accept LIKE nor IN, just single 
values or simple operators (I am using PostGIS).

queryByAttributes("gid", "gid > 100", MS_MULTIPLE) // does not found anything
queryByAttributes("gid", "100", MS_MULTIPLE) // found one result
queryByAttributes("municipio", "'GUADALAJARA'", MS_MULTIPLE) // found one result
queryByAttributes("municipio", "municipio LIKE 'G%'", MS_MULTIPLE) // does not 
found anything
queryByAttributes("gid", "([gid] IN (100, 101))", MS_MULTIPLE); // query error
queryByAttributes("municipio", "([municipio] LIKE 'G%')", MS_MULTIPLE); // 
query error
queryByAttributes("gid", "([gid] > 100)", MS_MULTIPLE); // found 25 results

MS4W version is 3.1.3

Try to solve it by using FILTER, which allows more complex expressions:

$layer->setFilter("gid IN (100, 101)");


Cheers

On Wednesday, October 11, 2017, 10:55:17 AM CDT, Sven Schroeter 
<schroe...@netgis.de<mailto:schroe...@netgis.de>> wrote:


Hi,

Old Server: PHP 5.4.36 with MS 6.4.1 (MS4W)
New Server: PHP 5.6.31 with MS 7.0.6 (MS4W 3.2.2)

My Test Script:

$qfield = 'gid';
$qstring = "gid IN (1,2,3)";
@$datQuery = $query_layer->queryByAttributes($qfield,$qstring,MS_MULTIPLE);

Works fine on the old Server, on the new Server no result.

I have tried to change the query expression, i.e.:
$qstring = "('[gid]' in '1,2,3')";

No result on old server and new...

How can I get it run on MS7?



Thanks + greetings
Sven



**************************************
NETGIS GbR
Benediktinerstr. 32a
54292 Trier
Tel.: 0651-1704731
Fax: 0651-1704733
schroe...@netgis.de<mailto:schroe...@netgis.de>
www.netgis.de<http://www.netgis.de>


_______________________________________________
mapserver-users mailing list
mapserver-users@lists.osgeo.org<mailto:mapserver-users@lists.osgeo.org>
https://lists.osgeo.org/mailman/listinfo/mapserver-users
_______________________________________________
mapserver-users mailing list
mapserver-users@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/mapserver-users

Reply via email to