使用Zend_Db_Select选择'0'AS变量...

时间:2010-02-25 20:06:15

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

我正在尝试创建一个使用以下结构的select语句:

$db
    ->select()  
    ->from(  
        array('i' => ...),  
        array('provisional', 'itemID', 'orderID'))  
    ->columns(array("'0' AS provisionalQty", "'ballast' AS productType"))  
    ->joinLeft(  
        array('o' => ...),  
        'i.orderID = o.orderID', array())  
    ->joinLeft(  
        array('f' => ...),  
        'i.productID = f.fixtureID AND f.supplierID = o.supplierID', array())  
    ->joinLeft(  
        array('b' => ...),  
        'f.lampTechnology = b.lampTechnology ' .  
        ' AND f.lampCount = b.lampCount ' .  
        ' AND f.ballastVoltage = b.ballastVoltage ' .  
        ' AND b.supplierID = o.supplierID')  
    ->where('i.orderID = ?', $oObj->orderID, Zend_Db::INT_TYPE)  
    ->where('!i.hidden AND i.productType = ? AND !i.provisional', 'fixture')  

MySQL中的等价物看起来像这样(工作正常)......

SELECT '0' AS provisionalQty, 'ballast' AS productType, i.* FROM ... LEFT JOIN ... WHERE ...;

然而,这并不像预期的那样有效。 $ db-> columns()方法希望每个列都附加一个表,甚至是'伪'列。有什么想法吗?

-Chris

2 个答案:

答案 0 :(得分:1)

由于此类的工作方式,似乎使用字符串/数组查找特定的表,而Zend_Db_Expr类不需要实际的表。

$db
    ->select()
    ->columns(new Zend_Db_Expr("'0' AS provisionalQty, 'ballast' AS productType"))

答案 1 :(得分:0)

我认为您在这里使用的列选择不正确。它应该是这样的:

// "ballast AS productType, 0 as provisionalQty"
$db->columns(array("productType" => "ballast", "provisionalQty" => 0));

请记住,列抽象与正常的AS语句相反,您不必包含“AS”。