1

次の構造を使用する 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() メソッドは、「疑似」列であっても、各列にテーブルが関連付けられていることを想定しています。何か案は?

-クリス

4

3 に答える 3

1

このクラスの動作方法から、文字列/配列を使用すると特定のテーブルが検索されるように見えますが、Zend_Db_Expr クラスは実際のテーブルを必要としません。

$db
    ->select()
    ->columns(new Zend_Db_Expr("'0' AS provisionalQty, 'ballast' AS productType"))
于 2010-02-25T20:21:47.620 に答える
0

ここで列選択を誤って使用していると思います。次のようになります。

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

列の抽象化は通常のASステートメントの逆であり、「AS」を含める必要はないことを覚えておいてください。

于 2010-02-25T20:10:36.330 に答える