[英]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.