Zend 2中两个表的并集

Posted

技术标签:

【中文标题】Zend 2中两个表的并集【英文标题】:Union of two tables in Zend 2 【发布时间】:2018-10-07 04:01:57 【问题描述】:

我想用 zf2 中的 where 子句合并两个表:-

table1 app_followers 表 2 app_users 条件可以是任何东西 并按更新日期订购。

请让我知道 zend 2 的查询。

谢谢..

【问题讨论】:

【参考方案1】:

使用 UNIONZF2

使用ZF2专用类Combine Zend\Db\Sql\Combine

    new Combine(
     [
      $select1,
      $select2,
      $select3,
       ...
     ]
    )

使用 combine 的详细示例如下:

$select1 = $sql->select('java');
$select2 = $sql->select('dotnet');
$select1->combine($select2);

$select3 = $sql->select('android');

$selectall3 = $sql->select();
$selectall3->from(array('sel1and2' => $select1));
$selectall3->combine($select3);

$select4 = $sql->select('network');

$selectall4 = $sql->select();
$selectall4->from(array('sel1and2and3' => $selectall3));
$selectall4->combine($select4);

$select5 = $sql->select('dmining');

$selectall5 = $sql->select();
$selectall5->from(array('sel1and2and3and4' => $selectall4));
$selectall5->combine($select5);

相当于普通的对 UNION 的 SQL 查询:

SELECT * FROM java 
UNION SELECT * from dotnet 
UNION SELECT * from android 
UNION SELECT * from network;
UNION SELECT * from dmining;

希望对你有帮助。

【讨论】:

【参考方案2】:

我想做一个类似的任务,并花了很多时间来弄清楚如何以正确的方式完成它。

Laminas\Db\Sql\Combine 的想法非常好,但是您不能将排序应用于此对象,因此在这种情况下它是无用的。

最后,我得到了下一个代码:

$skill = $sql->select('skill');
$language = $sql->select('language');
$location = $sql->select('location');
$occupation = $sql->select('occupation');

$skill->combine($language);
$language->combine($location);
$location->combine($occupation);

$combined = (new Laminas\Db\Sql\Select())
    ->from(['sub' => $skill])
    ->order(['updated_date ASC']);

但是,括号有点乱。如果对你有问题,请在 Github 上查看这个comment,但在 mysql 上的 id 无所谓,不确定其他数据库。

【讨论】:

以上是关于Zend 2中两个表的并集的主要内容,如果未能解决你的问题,请参考以下文章

asp.net两个数组的并集

使用两个表的并集获取Count&ŧ039;s

ES6数组:两个数组或数组对象取并集、交集、差集

用linq做数组取并集

用java编写程序,求集合的并集、交集和差集

在 spark java 中取两个数据集并集的必要条件是啥