[mapserver-users] php Mapscript queryByAttributes

Carlos Ruiz boolean10001 at yahoo.com
Wed Oct 11 14:03:01 PDT 2017


Hey Steve,
> the IN operator works off a delimited list, tryqueryByAttributes("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.lime at 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 asmunicipio = "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, tryqueryByAttributes("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 bequeryByAttributes("municipio", "(‘[municipio]’ LIKE 'G%')", MS_MULTIPLE);
 
  
 
Steve
 
  
 
From: mapserver-users [mailto:mapserver-users-bounces at lists.osgeo.org]On Behalf Of Carlos Ruiz
Sent: Wednesday, October 11, 2017 1:36 PM
To: mapserver-users at lists.osgeo.org; Sven Schroeter <schroeter at 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 <schroeter at 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
 
schroeter at netgis.de
 
www.netgis.de
 
  
 
  
 
_______________________________________________
 
mapserver-users mailing list
 
mapserver-users at lists.osgeo.org
 
https://lists.osgeo.org/mailman/listinfo/mapserver-users
   
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/mapserver-users/attachments/20171011/bae99b73/attachment-0001.html>


More information about the mapserver-users mailing list