RE: MultSelect ListBox hell!

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Wow!  Thank you!

Stuart
--- Bastien Koert <bastien_k@xxxxxxxxxxx> wrote:

> 
> ah, i get the problem now...
> 
> what you need to do is create the entire sql
> statement on the fly, based on 
> whether or not there are results for a particular
> field....
> 
> <?
> ....
> 
> //base sql statement
> $sql = "select * from jobs where record_deleted =
> 'NO' ";
> 
> if (isset($_POST['states'])){
>    //check to see if the states is an array
> (multiple items or just one
>    if (is_array($_POST['state'])){
>      $sql .= "(";
>      $x = 0;
>      foreach ($_POST['state'] as $state)
>        if ($x == 0){
>        $sql.= "state = '$state' ";
>        $x=1;
>      }else{
>         $sql .= " OR state = '$state' ";
>     }
>     $sql .= ")";
>   }else{
>      //$_POST['state'] is not an array
>      $sql .= "state = '".$_POST['state']."' ";
> }//end if
> 
> if (isset($_POST['job'])){
>   if (isset($_POST['state'])){  $sql .= " AND "; } 
> //add in the AND if the 
> state is set
>   //check to see if the states is an array (multiple
> items or just one
>    if (is_array($_POST['job'])){
>      $sql .= "(";
>      $x = 0;
>      foreach ($_POST['job'] as $job )
>        if ($x == 0){
>        $sql.= "job = '$job ";
>        $x=1;
>      }else{
>         $sql .= " OR job = '$job ";
>     }
>     $sql .= ")";
>   }else{
>      //$_POST['job'] is not an array
>      $sql .= "job = '".$_POST['job']."' ";
> }//end if
> ...
> ?>
> 
> 
> And something like that needs to be done for each
> element in the search
> 
> Bastien
> 
> >From: Stuart Felenstein <stuart4m@xxxxxxxxx>
> >To: Bastien Koert <bastien_k@xxxxxxxxxxx>,
> php-db@xxxxxxxxxxxxx
> >Subject: RE:  MultSelect ListBox hell!
> >Date: Wed, 22 Sep 2004 06:49:55 -0700 (PDT)
> >
> >Correct, I've added that AND, and so now it will
> match
> >jobs by state.
> >But without choosing state, no job return.
> >So I'm figuring i'll have to add another series of
> >OR's .  Trying to figure that out now.
> >
> >Stuart
> >--- Bastien Koert <bastien_k@xxxxxxxxxxx> wrote:
> >
> > > need to have AND between states and jobs
> > >
> > > select * from tablename where (jobs='accounting'
> or
> > > jobs='bookkeeping') and
> > > (state = 'AL' or state='CA')
> > >
> > > Bastien
> > >
> > >
> > > >From: Stuart Felenstein <stuart4m@xxxxxxxxx>
> > > >To: php-db@xxxxxxxxxxxxx
> > > >Subject:  MultSelect ListBox hell!
> Date:
> > > Wed, 22 Sep 2004 05:19:36
> > > >-0700 (PDT)
> > > >
> > > >I am in the process of building a search form
> for
> > > the
> > > >database.  The entire thing consists of 3 multi
> > > >selects and 2 text boxes with a "contains".  Oh
> and
> > > >I've only rigged 2 of the multi selects for the
> > > time
> > > >being.
> > > >So the way the multiselects should work that
> the
> > > user
> > > >can  choose one or the other or both, but the
> more
> > > >criteria provided back to the query , the more
> > > refined
> > > >the return.
> > > >
> > > >Here is the code and my tale of woe
> > > follows:($projects
> > > >is a just a holder / variable)
> > > >
> > > >function BindEvents()
> > > >{
> > > >     global $VendorJobs;
> > > >
> > >
> $VendorJobs->ds->CCSEvents["BeforeExecuteSelect"]
> > > >= "VendorJobs_ds_BeforeExecuteSelect";
> > > >}
> > > >//End BindEvents Method
> > > >
> > > >//VendorJobs_ds_BeforeExecuteSelect @2-A4F75E44
> > > >function VendorJobs_ds_BeforeExecuteSelect()
> > > >{
> > > >     $VendorJobs_ds_BeforeExecuteSelect = true;
> > > >//End VendorJobs_ds_BeforeExecuteSelect
> > > >
> > > >global $VendorJobs;
> > > >$s_Industry = CCGetParam("s_Industry", "");
> > > >if (count($s_Industry) > 0 AND
> > > is_array($s_Industry))
> > > >{
> > > >foreach ($s_Industry as $key => $value) {
> > > >if ($Projects != "") $Projects = $Projects.",";
> > > >$Projects = $Projects."'".$value."'";
> > > >}
> > > >}
> > > >if ($Projects)
> > > >$VendorJobs->ds->SQL.= " AND
> (`VendorJobs`.Industry
> > > IN
> > > >(".$Projects."))";
> > > >
> > > >$s_LocationState =
> CCGetParam("s_LocationState",
> > > "");
> > > >if (count($s_LocationState) > 0 AND
> > > >is_array($s_LocationState)) {
> > > >foreach ($s_LocationState as $key => $value) {
> > > >if ($Projects != "") $Projects = $Projects.",";
> > > >$Projects = $Projects."'".$value."'";
> > > >}
> > > >}
> > > >if ($Projects)
> > > >$VendorJobs->ds->SQL.= " AND
> > > >(`VendorJobs`.LocationState IN
> (".$Projects."))";
> > > >
> > > >echo "SQL:". $VendorJobs->ds->SQL."<br>";
> > > >
> > > >return $VendorJobs_ds_BeforeExecuteSelect;
> > > >
> > > >If you notice in the the SQL the "AND", I've
> > > changed
> > > >them back and forth to OR and a combo of AND in
> the
> > > >first and OR in the second.
> > > >
> > > >If I have OR in both, then each multi works on
> it's
> > > >own, no refined / results.  If I have AND in
> both,
> > > >then they come together but if I try to add
> more
> > > >values (like a multi select should allow) I get
> a
> > > "no
> > > >records" return.
> > > >So something like this using in both AND:
> > > >
> > > >I choose from Industry : Accounting and Finance
> > > >From LocationState: I choose Alabama
> > > >great it gives back to me all accounting and
> > > finance
> > > >records Alabama
> > > >But if I add in LocationState, Alabama and
> > > California
> > > >then a no records is returned.
> > > >
> > > >Anyway, if anyone has some pointers or ideas
> I'd
> > > >greatly appreciate.
> > > >
> 
=== message truncated ===

-- 
PHP Database Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [PHP Users]     [Postgresql Discussion]     [Kernel Newbies]     [Postgresql]     [Yosemite News]

  Powered by Linux