我可以在 Zend 2 的 JOIN 语句中使用 WHERE 子句吗?
Can I use WHERE clause within JOIN statement in Zend 2?
我有一个正常的SQL语句,其中returns来自数据库的15条记录。如果我尝试使用 Zend 2 复制相同的东西,它会 returns 9 条记录。不同之处在于其中一个 JOIN 中的一个 WHERE / Conditional 语句。
让我解释一下...
这是一个实际的 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 / Conditional (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'
)
我有一个正常的SQL语句,其中returns来自数据库的15条记录。如果我尝试使用 Zend 2 复制相同的东西,它会 returns 9 条记录。不同之处在于其中一个 JOIN 中的一个 WHERE / Conditional 语句。 让我解释一下...
这是一个实际的 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 / Conditional (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'
)