簡體   English   中英

我可以在Zend 2的JOIN語句中使用WHERE子句嗎?

[英]Can I use WHERE clause within JOIN statement in Zend 2?

我有一個普通的SQL語句,該語句從數據庫返回15條記錄。 如果我嘗試使用Zend 2復制同一件事,它將返回9條記錄。 區別在於其中一個JOIN中有一個WHERE /條件語句。 讓我解釋...

這是一個實際的SQL查詢:

SELECT FROM 
   BLABLA AS B (some other joins and then..)

       LEFT JOIN
   CITY AS C ON C.SERVICE_ID = B.SERVICE_ID
                AND C.DELETED = FALSE
   WHERE
       (B.PRODUCT_ID = 2219)
          AND (B.DELETED = FALSE);

如您所見,在JOIN語句中有一個WHERE /條件(AND C.DELETED = FALSE)子句,我想在Zend 2 DB select中做同樣的事情。

所以我這樣做:

$select = $sql->select(); // This is Zend 2's select()

$select->from(
            ['B' => 'BLABLA']
        )

        ->columns(
            [
                'VALUE',
                'NOTES',
                'SERVICE_ID'
            ]
        )


        ->join(
            ['C' => 'CITY'],
            'C.SERVICE_ID = B.SERVICE_ID',
            'left'
        )

        ->where('C.DELETED = FALSE') // If I remove this line, it returns 15 records just like that plain SQL query, however doing so I lose this conditional statement. If I don't remove it, it returns 9 records.
        ->where('B.DELETED = FALSE')
        ->where('B.PRODUCT_ID = 2219');

我究竟做錯了什么? :(

請嘗試下面的ZEND SQL代碼。

$select = $sql->select(); // This is Zend 2's select()

$select->from(
            ['B' => 'BLABLA']
        )

        ->columns(
            [
                'VALUE',
                'NOTES',
                'SERVICE_ID'
            ]
        )


        ->join(
            ['C' => 'CITY'],
            'C.SERVICE_ID = B.SERVICE_ID AND C.DELETED = FALSE',
            'left'
        )
        ->where('B.DELETED = FALSE')
        ->where('B.PRODUCT_ID = 2219');

解決了。

顯然,您需要使用表達式將這些東西包裝起來。 因此,就我而言:

->join(
     ['C' => 'CITY'],
     new \Zend\Db\Sql\Expression('C.SERVICE_ID = B.SERVICE_ID AND C.DELETED = FALSE'),
     'left'
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM