Zend数据库适配器 - 复杂的MySQL查询

时间:2010-04-07 21:37:56

标签: php mysql zend-framework pdo zend-db

我在导航模型中定义了一个执行查询的函数,我想知道是否有更多“Zendy”生成/执行查询的方法。我正在使用的查询是Bill Karwinanother thread here上提出的用于设置任意记录顺序的查询。我尝试使用预准备语句,但引用了SIGN()函数中的值。

我正在使用MySQL的PDO适配器。

/**
 *
 */
public function setPosition($parentId, $oldPosition, $newPosition)
{
    $parentId = intval($parentId);
    $oldPosition = intval($oldPosition);
    $newPosition = intval($newPosition);
    $this->getAdapter()->query("
        UPDATE `navigation`
        SET `position` = CASE `position`
            WHEN $oldPosition THEN $newPosition
            ELSE `position` + SIGN($oldPosition - $newPosition)
            END
        WHERE `parent_id` = $parentId
        AND `position` BETWEEN LEAST($oldPosition, $newPosition)
            AND GREATEST($oldPosition, $newPosition)
    ");
    return $this;
}

1 个答案:

答案 0 :(得分:4)

您可以使用Zend_Db_Select和/或Zend_Db_Expr如果它的工作原理是这样,请不要更改它。实际上不需要使用任何ZF组件只是因为它们存在或者使您的代码更加 Zendy 。使用它们来解决特定问题。

请记住,每次抽象都会使代码速度慢一些。可能不多,但也可能没有必要。我可以从我自己的经验中说出我们屈服于尽可能多地使用ZF组件的项目,即使我们可以做到没有更简单。没有得到回报,我们发现自己后来重构了很多。