1

私はdbから雑誌を読むためのクエリを持っています

$select = $db->select()
            ->from('tbl_magazine',array('magazine_id','magazine_name'))
            ->join('tbl_magazine_issue','tbl_magazine_issue.magazine_id = tbl_magazine.magazine_id',array(null))
            ->join('mst_publisher','mst_publisher.publisher_id = tbl_magazine.publisher_id',array(null))
            ->where('tbl_magazine.is_active =?',1)
            ->where('mst_publisher.is_active =?',1)
            ->where('tbl_magazine_issue.os_select =?',2)
            ->where('tbl_magazine_issue.publish_status = ?',1)
            ->where('curdate() <= DATE(tbl_magazine.validity_till)')
            ->group('tbl_magazine.magazine_id')
            ->limit($start,$per_page);

しかし、クエリを印刷すると、次のようなものが表示されます

SELECT `tbl_magazine`.`magazine_id`, `tbl_magazine`.`magazine_name` 
FROM `tbl_magazine` 
INNER JOIN `tbl_magazine_issue` ON tbl_magazine_issue.magazine_id = tbl_magazine.magazine_id 
INNER JOIN `mst_publisher` ON mst_publisher.publisher_id = tbl_magazine.publisher_id 
WHERE (tbl_magazine.is_active =1) AND (mst_publisher.is_active =1) 
  AND (tbl_magazine_issue.os_select =2) AND (tbl_magazine_issue.publish_status = 1) 
  AND (curdate() <= DATE(tbl_magazine.validity_till)) 
GROUP BY `tbl_magazine`.`magazine_id` 
LIMIT 2147483647 OFFSET 8

しかし、私は $start を 0 に、$perpage を 8 に設定しました

制限のあるクエリを探していました"limit 0 ,8"

4

1 に答える 1

5

limit正しく使用していません。

からの関数定義は次のとおりですZend_Db_Select。ご覧のとおり、最初のパラメーターはcountありませんoffset

/**
 * Sets a limit count and offset to the query.
 *
 * @param int $count OPTIONAL The number of rows to return.
 * @param int $offset OPTIONAL Start returning after this many rows.
 * @return Zend_Db_Select This Zend_Db_Select object.
 */
public function limit($count = null, $offset = null)
{
    $this->_parts[self::LIMIT_COUNT]  = (int) $count;
    $this->_parts[self::LIMIT_OFFSET] = (int) $offset;
    return $this;
}


そして、なぜこれらのクレイジーな値を取得していたのかを説明するために... 以下は、SQL クエリをレンダリングするスクリプトの一部です。オフセットがあったため、カウントを PHP_INT_MAX に設定していました。

 if (!empty($this->_parts[self::LIMIT_OFFSET])) {
        $offset = (int) $this->_parts[self::LIMIT_OFFSET];
        $count = PHP_INT_MAX;
    }
于 2012-04-11T05:05:52.060 に答える