Index  Up  <<  >>  


Coordinated and joined searching

MiniVend will do a complete range of tests on individual columns in the database. To use this function, set mv_coordinate to yes (co=yes in the one-click syntax).

In order to use coordinated searching, the number of search fields must equal the number of search strings. This makes sense if you think about it a bit.

If you want to make sure that is the case, use the mv_search_map variable. It allows you to map variables to others in the search specification. For example:

    <INPUT TYPE=hidden NAME=mv_search_map VALUE="
        mv_searchspec=search1
        mv_searchspec=search2
        mv_searchspec=search3
        ">
    <INPUT TYPE=hidden NAME=mv_search_field VALUE=title>
    <INPUT TYPE=hidden NAME=mv_search_field VALUE=artist>
    <INPUT TYPE=hidden NAME=mv_search_field VALUE=category>
    Artist: <INPUT NAME=search1 VALUE="">
    Title:  <INPUT NAME=search2 VALUE="">
    Genre:  <INPUT NAME=search3 VALUE="">

Even if the user leaves one blank, the search will work.

Leading/trailing whitespace is stripped from all lines in the mv_search_map variable, so you can position it as shown for convenience.

Coordinated searches may be joined with the output of another table if you set one of the mv_search_field values to a table:column pair. Note that this will slow down large searches considerably unless you have another search specification, as the database must be accessed for every search line! If you have a search field that qualifies for a regular expression search function, or are doing a binary search with mv_dict_look, or are not doing an OR search, the penalty should not be too great as only matching lines will cause an access to the database.

Individual field operations can then be specified with the mv_column_op (or op) parameter. The operations include:

    operation            string     numeric   equivalent
    ---------           
    equal to               eq         ==           =
    not equal              ne         !=           <>
    greater than           gt         > 
    less than              lt         < 
    less than/equal to     le         <= 
    greater than/equal to  ge         >= 
    regular expression     rm                       =~ , LIKE
    regular expression NOT rn                       !~
    exact match            em

An example:

    [page scan
            co=yes
            sf=title
            se=Sunflowers
            op=em
            sf=artist
            se=Van Gogh
            op=rm          ] Sunflowers, Van Gogh [/page]

    [page search="
            co=yes
  
            sf=title
            se=Sunflowers
            nu=0
            op=!~
  
            sf=artist
            se=Van Gogh
            op=rm    
            nu=0

            sf=inventory:qty
            se=1
            op=>=
            nu=1 
        "] Any in stock except Sunflowers, Van Gogh [/page]

Note that in the second example you need to specify nu=0 even though that is the default. This is to set the proper correspondence. To avoid having to do this, use MiniVend's option array feature:

    [page search.0="
                    sf=title
                    se=Sunflowers
                    op=!~
                "
          search.1="
                    sf=artist
                    se=Van Gogh
                "
          search.2="
                    sf=inventory:qty
                    se=1
                    op=>=
                    nu=1 
                "
        ] Any in stock except Sunflowers, Van Gogh [/page]

The co=yes is assumed when specifying a multiple search.

The second search will check the stock status of the painting provided there is an inventory table as in some of the MiniVend demo catalogs. If the qty field is greater than or equal to 1, then the product will be picked. If out of stock, it will not be found.

It always helps to have an rm type included in the search. This is used to pre-screen records so that database accesses only need be made for already-matching entries. If accesses must be made for every record large searches can get quite slow.


Index  Up  <<  >>