Well ... I played around with this and was able to hack up the Select class
to put this functionality in. here it is if anyone is interested:

http://www.mindfulinteractive.com/zend/Select.txt

Basically you can now do something like

$select->sqlCalcFoundRows();

And it will add 'SQL_CALC_FOUND_ROWS' at the beginning of the sql statement.
I don't know what will happen if you do both distinct and sqlCalcFoundRows
...

I'm now trying to see if I can subclass it, but I'm not a OOP Master. Here's
my attempt, but I can't quite seem to override $_partsInit with my
$_partsInit ...

<?php

class NewSelect extends Zend_Db_Select {
        const CALC_ROWS      = 'sqlCalcFoundRows';
        const SQL_CALC_ROWS      = 'SQL_CALC_FOUND_ROWS';
        
        /**
     * The initial values for the $_parts array.
     * NOTE: It is important for the 'FOR_UPDATE' part to be last to ensure
     * meximum compatibility with database adapters.
     *
     * @var array
     */
    protected static $_partsInit = array(
        self::DISTINCT     => false,
        self::CALC_ROWS    => false,
        self::COLUMNS      => array(),
        self::FROM         => array(),
        self::WHERE        => array(),
        self::GROUP        => array(),
        self::HAVING       => array(),
        self::ORDER        => array(),
        self::LIMIT_COUNT  => null,
        self::LIMIT_OFFSET => null,
        self::FOR_UPDATE   => false
    );
    
     public function sqlCalcFoundRows( $flag = true )
    {
        echo 'test';
        $this->_parts[self::CALC_ROWS] = (bool) $flag;
        return $this;
    }
    
     protected function _renderSqlCalcFoundRows( $sql ) 
    {
        if( $this->_parts[self::CALC_ROWS]) {
                $sql .= ' ' . self::SQL_CALC_ROWS ;
        }
        
        return $sql;
    }
}

MS
-----Original Message-----
From: Shekar C Reddy [mailto:[EMAIL PROTECTED] 
Sent: Thursday, April 17, 2008 1:41 PM
To: Gunter Sammet
Cc: Mark Steudel; James Dempster; fw-general@lists.zend.com
Subject: Re: [fw-general] CALC_FOUND_ROWS vs. count(*)

Creating a Jira issue would be ideal to keep a track of this task.



On Thu, Apr 17, 2008 at 3:21 PM, Gunter Sammet <[EMAIL PROTECTED]>
wrote:
> I ended up retrieving the SQL as string and do a string replace and then
> execute the SQL statement. Not very elegant but it solved my problem at
that
> time. If you come up with a more elegant way, please let me know.
> Once I have time I'd like to add this as a functionality to the select
class
> to allow for an DB independant way of doing this. I remember that I asked
in
> the forum before and at that time it didn't seem to be very much required
> and for that reason didn't have much importance.
> HTH
>
> Gunter
>
>
>
> On Thu, Apr 17, 2008 at 2:07 PM, Mark Steudel <[EMAIL PROTECTED]> wrote:
>
> >
> >
> >
> >
> > Well couple of problems,
> >
> >
> >
> > I can't mix a count() statement in my sql statement the whole mixing
group
> columns with non group columns thing
> > Even if I try and trick it by putting at the begging the select methods
> quote everything, so it because something like:
> >
> > SELECT `SQL_CALC_FOUND_ROWS table`.`id` ..
> >
> >
> >
> > :/ Any other ideas?
> >
> >
> >
> > MS
> >
> >
> >
> > ________________________________
>
> >
> > From: James Dempster [mailto:[EMAIL PROTECTED]
> > Sent: Thursday, April 17, 2008 12:48 PM
> > To: Mark Steudel
> > Cc: fw-general@lists.zend.com
> > Subject: Re: [fw-general] CALC_FOUND_ROWS vs. count(*)
> >
> >
> >
> >
> >
> >
> > Have you tried
> >
> > array('line_items_per_product' => 'CALC_FOUND_ROWS COUNT(*)'))
> >
> > I think that might work.
> >
> > --
> > /James
> >
> >
> > On Thu, Apr 17, 2008 at 8:06 PM, Mark Steudel <[EMAIL PROTECTED]>
wrote:
> >
> >
> >
> > Hey Guys,
> >
> >
> >
> > I was looking for a way to use CALC_FOUND_ROWS in mysql, I saw in the
> documentation you could get the same thing by doing this:
> >
> >  array('line_items_per_product' => 'COUNT(*)'))
> >
> >
> >
> >
> > If I wanted to do CALC_FOUND_ROWS instead, how would I do it utilizing
the
> Zend_DB?
> >
> >
> >
> > Thanks, Mark
> >
> >
> >
> >
>
>

Reply via email to