Please ignore the new suggested name. It is a part of the where clause
[where()/orWhere()] and so, in() would be ideal:

 $select->where(    $select->in( ... ));
$select->orWhere( $select->in( ... ));

Thanks




On 11/21/07, Shekar C Reddy <[EMAIL PROTECTED]> wrote:
>
> I guess the new method should be named inWhere().
>
>
>
>
> On 11/21/07, Shekar C Reddy <[EMAIL PROTECTED]> wrote:
> >
> > Thomas,
> >
> > I encourage you to test the where() method with v1.0.2 and see the
> > results - it generates SQL imploding all the array values into a single
> > placeholder as expected. The documentation used to have this usage listed
> > but now it seems to have been removed. The code snipped you gave generated
> > the following SQL with 1.0.2:
> >
> > price IN (2, 10, 14, 20, 2, 10, 14, 20, 2, 10, 14, 20, 2, 10, 14, 20)
> >
> > and the following SQL with the current SVN:
> >
> > price IN (2, 10, 14, 20)
> >
> > indicating they are generating different SQL. Enhancements are welcome
> > but I thought they would be backwards compatible - I had to revert to
> > 1.0.2 :(  The old code used to be generic and would apply to both - a
> > normal where clause with a boolean operator or an IN operator because it
> > used to implode the array into a list of values to replace a single
> > placeholder but the new enhancements need IN-operators handled differently
> > using arrays and multiple placeholders. I guess having a separate in()
> > function for such expressions is more ideal and desired at the component
> > level.
> >
> > Here is the issue to get started:
> >
> > http://framework.zend.com/issues/browse/ZF-2223
> >
> >
> > Keep up the good work!
> >
> >
> >
> >
> >
> > On 11/21/07, Thomas Weidner <[EMAIL PROTECTED] > wrote:
> > >
> > > Shekar,
> > >
> > > actually the documentation does not mention this usage.
> > >
> > > And there are also no testcases.
> > > All testcases have approved before I did my commit.
> > >
> > > Actually, giving an array as input would result in each single
> > > placeholder
> > > to be replaced.
> > >
> > > where("price > ? and price <= ?", array(2, 10));
> > > becomes
> > > "where (price > 2 and price <= 10)"
> > >
> > > This is the reason why the automatic imploding does not work anymore.
> > >
> > > Principially there are several ways:
> > > You could for example do the following:
> > >
> > > $array = array(2,10,14,20);
> > > $addwhere = "";
> > > for($i = 1; $i < count($array); ++$i) {
> > >    $addwhere .= ", ?";
> > > }
> > >
> > > $where = "price IN (?". $addwhere.")";
> > > $db->where($where, $array);
> > >
> > > In my eyes it would be better to have a own "IN" function avaiable for
> > > such
> > > clauses.
> > > I am actually also working on a BEWTEEN function which adds between to
> > > be
> > > avaiable.
> > >
> > > So eighter you use a the codesnippet I gave you or you add a new issue
> > > for
> > > creating a "IN" function which handles the IN within the where clause.
> > >
> > > Greetings
> > > Thomas
> > > I18N Team Leader
> > >
> > >
> > > ----- Original Message -----
> > > From: "Shekar C Reddy" <[EMAIL PROTECTED]>
> > > To: "Thomas Weidner" < [EMAIL PROTECTED] >
> > > Cc: "Zend Framework General" < [email protected]>
> > > Sent: Wednesday, November 21, 2007 8:28 AM
> > > Subject: Re: [fw-general] Zend_Db_Select::where() malfunction
> > >
> > >
> > > > Thomas,
> > > >
> > > > This feature of imploding an array of values into a single
> > > place-holder
> > > > was
> > > > there from the the days of ZF v0.1.5 or earlier. My code was working
> > > fine
> > > > all these days. There were code examples in the documentation that
> > > showed
> > > > how an array would be imploded into the SQL using where(). I even
> > > created
> > > > an
> > > > issue in the past to avoid quoting numeric values in the resulting
> > > SQL's
> > > > array (look for the issue that reads: "quote() quotes numeric
> > > values" a
> > > > bug
> > > > that was attributed to PDO). I just did a diff on Select.php between
> > > the
> > > > current SVN and 1.0.2 and noticed that where() method actually
> > > invokes and
> > > > delegates to _where() in the current SVN whereas there is no
> > > _where()
> > > > method
> > > > in 1.0.2. My same code with ZF 1.0.2 works fine as expected but not
> > > with
> > > > the
> > > > latest SVN update.
> > > >
> > > > If this is not supported, what's the syntax for the expected SQL? I
> > > need
> > > > to
> > > > generate a where clause as under:
> > > >
> > > > WHERE status IN ( 'A', 'I' )
> > > >
> > > > Thanks,
> > > >
> > > >
> > > >
> > > >
> > > > On 11/20/07, Thomas Weidner < [EMAIL PROTECTED]> wrote:
> > > >>
> > > >> Hy Shekar,
> > > >>
> > > >> this is not supported, and it was not supported in the past.
> > > >> Because ? is a placeholder for only ONE variable.
> > > >> And you gave two within your array :-)
> > > >>
> > > >> Actually I am working on a array integration which adds several new
> > > >> features
> > > >> to where.
> > > >> But the behaviour you are expecting would break things with other
> > > new
> > > >> where
> > > >> features.
> > > >>
> > > >> For now it is not planned to support such a use case.
> > > >>
> > > >> Btw: Before my improvement several days ago even the first variable
> > > would
> > > >> not have been integrated.
> > > >> That the array value is inserted for a placeholder is also one of
> > > the new
> > > >> features :-)
> > > >>
> > > >> Greetings
> > > >> Thomas
> > > >> I18N Team Leader
> > > >>
> > > >> ----- Original Message -----
> > > >> From: "Shekar C Reddy" <[EMAIL PROTECTED]>
> > > >> To: "Zend Framework General" < [email protected] >
> > > >> Sent: Tuesday, November 20, 2007 10:55 AM
> > > >> Subject: [fw-general] Zend_Db_Select::where() malfunction
> > > >>
> > > >>
> > > >> > Bill,
> > > >> >
> > > >> > I downloaded the latest SVN today and noticed a strange behavior
> > > with
> > > >> the
> > > >> > select component:
> > > >> >
> > > >> > $select->where( 'status IN ( ? )', array( 'A', 'I' ));
> > > >> >
> > > >> >
> > > >> > SQL generated:
> > > >> >
> > > >> > WHERE status IN ( 'A' )
> > > >> >
> > > >> >
> > > >> > SQL expected:
> > > >> >
> > > >> > WHERE status IN ( 'A', 'I' )
> > > >> >
> > > >>
> > > >>
> > > >
> > >
> > >
> >
>

Reply via email to