Hi Mark
Do I understand correctly that you just needed to use that function as
a returning field?
If so, did the following not work for you?
$select->from('yourtable', array('line_items_per_product' => new
Zend_Db_Expr('CALC_FOUND_ROWS')));
Using a Zend_Db_Expr prevents a string from having further escaping
applied to it.
Cheers
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
--
Simon Mundy | Director | PEPTOLAB
""" " "" """""" "" "" """"""" " "" """"" " """"" " """""" "" "
202/258 Flinders Lane | Melbourne | Victoria | Australia | 3000
Voice +61 (0) 3 9654 4324 | Mobile 0438 046 061 | Fax +61 (0) 3 9654
4124
http://www.peptolab.com