0

Zend_Db_Select 对象是否支持相交?它支持联合(即这是可能的, $db->select->union($sql1,$sql2) ),但是当我查看文档时,没有像 intersect 这样的方法。

那么与 Zend_Db 有什么交集呢?

4

1 回答 1

0

尽管我不想这么说,但Zend_Db_Select不支持INTERSECT. 你将不得不运用你的聪明才智来使这成为可能。您可以扩展Zend_Db_Select以添加该功能或构建您的 SQL 字符串并使用适配器来获取记录。

通过扩展来完成以下任务应该不会太难Zend_Db_Select

$sql1 = new My_Db_Select($db);
$sql1->from('tbl1');
$sql2 = $db->select();
$sql2->from('tbl2');
$sql1->intersect($sql2); // alternate usage, $sql1->intersect($sql2, $sql3, $sql4);
echo $sql1; // prints SELECT * FROM tbl1 INTERSECT SELECT * FROM tbl2

为了实现这一点,您必须在通过添加对象时为相交对象创建一个存储,My_Db_Select::intersect然后创建My_Db_Select::assemble到第一次调用$sql = parent::assemble,然后循环遍历相交部分并将每个调用附加到每个调用assembleforeach($intersect as $select) $sql .= ' INTERSECT ' . $select->assemble();

于 2011-07-20T19:17:40.633 回答