And perhaps, if you would like to do something very tricky, you could create a function or stored procedure into your database and call that from DATA with the dynamic variables? The compute_style thing in this thread suggests that it might work http://www.mail-archive.com/mapserver-users@lists.osgeo.org/msg08537.html
-Jukka Rahkonen- Smith, Michael wrote: > At the SQL level, you can do some fancy work with CASE and setting some > default values > > The CASE function allows you to set all kind of logical comparisons. You can > do > conditional joins that way, setting the join condition to a non matching value > when you don't want the join, etc. SQL is more powerful than any template > language. > > Mike > > > > On 9/21/12 7:07 AM, "Julien Cigar" <jci...@ulb.ac.be> wrote: > > >On 09/21/2012 12:50, Rahkonen Jukka wrote: > >> Hi, > > > >Hello, > > > >> So you have tried to define variables %SEX% and %BOD_ID%, used them > >>inside your DATA and then fired WMS GetMaps by > >>adding&SEX=your_value&BOD_ID=your_id? Does in not work or why it is > >>not powerful enough? > > > >It is not powerful enough because it doesn't allow you to make simple > >logical tests (if defined/equals/...), the run-time substitution is a > >simple "replace %FOO%" by the value of FOO= from the query string. > > > >It doesn't allow you to do something like: "if FOO is defined or equal > >to xxx, then add "JOIN foo f ON f.id = bar.foo_id", select additional > >columns, and add a "WHERE foo.id = ..." at a certain place in the DATA > >string". > > > >I guess mapscript should be used in this case, but it would be really > >interesting to have this simple template language (or another solution) > >without having to involve mapscript. > > > >Julien > > > >> -Jukka Rahkonen- > >> > >> > >> Julien Cigar wrote: > >> > >>> Hello, > >>> > >>> I'm using Mapserver 6.0.1 with the following PostGIS layer: > >>> http://pastie.org/private/84042k84vmljbontls5xvq > >>> > >>> The user has the possibility to select quite a lot of filters, which > >>>implies that the SQL query should, in theory ,be generated > >>>dynamically. > >>> As this is not possible with Mapserver (run-time substitution with > >>>HTTP parameters and VALIDATION ... END isn't powerful enough is my > >>>case), I'm dynamically generating an SLD > >>> (http://pastie.org/private/p66ml3uvqwcnphuuvera) to filter items and > >>>it works very well. > >>> > >>> Some questions: > >>> > >>> - Why does Mapserver doesn't have a very lightweight template > >>>language (or something similar) to dynamically build a string > >>>following given parameters? It could be really useful to avoid > >>>unnecessary JOIN, etc. > >>> For example something like: > >>> http://pastie.org/private/bojm3pi1dwrv18m2tvq (this is just an > >>>example, but the idea is there) > >>> > >>> - I noticed in the PostgreSQL logs that sometimes Mapserver adds an > >>>additional condition to the WHERE clause when SLD is used. For > >>>example with the following<ogc:Filter> in my SLD: > >>> ######################################### > >>> <ogc:Filter> > >>> <ogc:PropertyIsEqualTo> > >>> <ogc:PropertyName>basis_of_record_id</ogc:PropertyName> > >>> <ogc:Literal>1</ogc:Literal> > >>> </ogc:PropertyIsEqualTo> > >>> </ogc:Filter> > >>> ######################################### > >>> > >>> Mapserver adds an additional "and (( ("basis_of_record_id"= 1) ))": > >>> > >>> (...) AS q where geom&& GeomFromText('POLYGON((-3.6860351557368 > >>> -9.81732918571448,-3.6860351557368 > 9.81732918571447,47.6860351496117 > >>> 9.81732918571447,47.6860351496117 -9.81732918571448,- > 3.6860351557368 > >>> -9.81732918571448))',4326) and (( ("basis_of_record_id"= 1) )) > >>> > >>> which is not bad as less rows have to be post-processed by the SLD > >>>engine. > >>> > >>> However, as soon as I add an additional<ogc:or> (or<ogc:and>) as: > >>> ######################################### > >>> <ogc:or> > >>> <ogc:PropertyIsEqualTo> > >>> <ogc:PropertyName>basis_of_record_id</ogc:PropertyName> > >>> <ogc:Literal>1</ogc:Literal> > >>> </ogc:PropertyIsEqualTo> > >>> <ogc:PropertyIsEqualTo> > >>> <ogc:PropertyName>basis_of_record_id</ogc:PropertyName> > >>> <ogc:Literal>2</ogc:Literal> > >>> </ogc:PropertyIsEqualTo> > >>> </ogc:or> > >>> ######################################### > >>> > >>> Mapserver doesn't add this additional AND/OR clause (and (( > >>>("basis_of_record_id"= 1) OR ("basis_of_record_id" = 2) )) in this > >>>case).. Why ? > >>> > >>> - Is it normal that my SLD is totally ignored when I'm using > >>> REQUEST=GetFeatureInfo? Is the SLD only processed with > >>> REQUEST=GetMap? > >>> If this is the case, what's the typical alternative way of doing it? > >>> Should I go through WFS .. ? > >>> > >>> In advance, thank you for your answers :) Julien > >>> > >>> -- > >>> No trees were killed in the creation of this message. > >>> However, many electrons were terribly inconvenienced. > >> _______________________________________________ > >> mapserver-users mailing list > >> mapserver-users@lists.osgeo.org > >> http://lists.osgeo.org/mailman/listinfo/mapserver-users > > > > > >-- > >No trees were killed in the creation of this message. > >However, many electrons were terribly inconvenienced. > > > > _______________________________________________ > mapserver-users mailing list > mapserver-users@lists.osgeo.org > http://lists.osgeo.org/mailman/listinfo/mapserver-users _______________________________________________ mapserver-users mailing list mapserver-users@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/mapserver-users