Bill Seitz wrote at 2007-11-28 13:20 -0500: >I want to see if a value (defined via url-arg) is in a list which is >generated from an RDBMS query (field type=integer). > >The pseudo-code would be something like: > >if foo in (select foo_col from table where x=y) >then z='t' >else z='f' > >I tried putting the simple SELECT query into a zSql and then calling it like: > ><dtml-call "REQUEST.set('foo_list',IfShowNextDoor())"> ><dtml-if expr="foo in foo_list"> > <dtml-call "REQUEST.set('z','t')"> ><dtml-else> > <dtml-call "REQUEST.set('z','f')"> ></dtml-if> > >But that doesn't work.
Off topic note: this is quite nasty and difficult to read code.... More helpful note: The result of a Z SQL Method call behaves like a sequence of rows. These rows are not strings; therefore "some_string == row" will fail (always return 'False') and correspondingly "some_string in sqlresult". The rows (they are in fact 'Record' instances) allow access to the fields either through a subscription ("row", "row" ...) or an attribute access ("row.field1", "row.field2", ...) syntax. Therefore, to get the list consisting of the first field of all rows, you may use [row for row in IfShowNextDoor()] Your code above can then be replaced with: <dtml-call "REQUEST.set( 'z', foo in [row for row in IfShowNextDoor()] and 't' or 'f' )"> which is already a lot more readable than your code. If possible, you should get rid of the "REQUEST.set" ("dtml-let" is more readable). And, of course, the advice from someone else to let the datebase perform the check for you it excellent: why do something inefficient and clumsy yourself when someone else (database) can do it more efficiently and more direct? -- Dieter _______________________________________________ Zope maillist - Zope@zope.org http://mail.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope-dev )