我是SQL查询
select * from table1
left join (values (4),(1800),(103500)) AS "filter (id) on table1.id=filter.id
默认使用引用的Zend_Db_Select表。 例如:
$result = '(values (4),(1800),(103500)) AS filter (id)';
$select->joinInner($result, "table1.id = filter.id", '');
结果:
SELECT * FROM "table1"
INNER JOIN "(values (4),(1800),(103500)) filter (id)" ON table1.id=filter.id
我需要
SELECT * FROM "table1"
INNER JOIN (values (4),(1800),(103500)) filter (id) ON table1.id=filter.id
如何禁用引用表?
答案 0 :(得分:1)
尝试将$ result作为Zend_Db_Expr添加到$ select。
答案 1 :(得分:0)
这有点棘手。请看下面的代码。
$dbh = Zend_Db_Table::getDefaultAdapter();
$select = $dbh->select();
$select->from('table1');
$select->joinInner(
array('filter (id)' => new Zend_Db_Expr('(values (4),(1800),(103500))')),
"table1.id = filter.id",
array()
);
echo $select->assemble() . PHP_EOL;
此代码默认输出以下语句,这不是我们真正想要的语句,因为引用了标识符filter (id)
。这是输出。
SELECT `table1`.* FROM `table1`
INNER JOIN (values (4),(1800),(103500)) AS `filter (id)` ON table1.id = filter.id
我们需要在配置选项中禁用autoQuoteIdentifiers
。例如:
'db' => array(
'adapter' => 'pdo_mysql',
'isDefaultTableAdapter' => true,
'params' => array(
'host' => '<host>',
'username' => '<user>',
'password' => '<pass>',
'dbname' => '<db>',
'options' => array(
'autoQuoteIdentifiers' => false,
),
),
)
我们得到以下输出
SELECT table1.* FROM table1
INNER JOIN (values (4),(1800),(103500)) AS filter (id) ON table1.id = filter.id
请注意,在这种情况下,开发人员负责在需要时引用标识符。
我认为不可能有选择地禁用其中一个表别名的引用。好吧,至少我发现这是不可能的,当我在本地查看1.x Zend框架代码;)