Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何从“推进”中的派生表中进行选择?_Php_Mysql_Propel - Fatal编程技术网

Php 如何从“推进”中的派生表中进行选择?

Php 如何从“推进”中的派生表中进行选择?,php,mysql,propel,Php,Mysql,Propel,我正在为一个应用程序使用推进PHP框架的v1.3,我找不到使用Criteria对象从派生表中进行选择的方法。我想要的部分SQL是: SELECT unioned_table.foo, quux.stuff, baz.more_stuff... FROM quux INNER JOIN (SELECT foo, bar FROM table1 UNION SELECT foo, bar FROM table2 ) AS unioned_table ON qu

我正在为一个应用程序使用推进PHP框架的v1.3,我找不到使用Criteria对象从派生表中进行选择的方法。我想要的部分SQL是:

SELECT unioned_table.foo, quux.stuff, baz.more_stuff...
FROM
  quux
  INNER JOIN
  (SELECT foo, bar FROM table1 
    UNION
    SELECT foo, bar FROM table2
  ) AS unioned_table
   ON quux.field = unioned_table.foo
 INNER JOIN baz
   ON baz.blah = unioned_table.bar
 INNER JOIN ...
 WHERE conditions...
实际的SQL比这更复杂,但这只包括进一步的连接

我曾尝试使用Criteria::addAlias,但不幸的是,它试图对表定义进行SQL转义。我最终放弃了以这种方式编写SQL,并在本例中创建了一个名为unisoned_table的视图

接下来,我尝试将联接添加到此表:

$c->addSelectColumn('unioned_table.foo');
$c->addSelectColumn(QuuxPeer::STUFF);
$c->addSelectColumn(BazPeer::MORE_STUFF);
// ...

$c->addJoin(QuuxPeer::FIELD, 'unioned_table.foo', Criteria::INNER_JOIN);
$c->addJoin(BazPeer::BLAH, 'unioned_table.bar', Criteria::INNER_JOIN);
// ...

$c->add(QuuxPeer::STUFF, $someval);
// ...
不幸的是,这导致视图被连接了两次——一次是与qux的内部连接,一次是与baz的交叉连接。奇怪的是,如果我删除baz SELECT列,那么交叉连接就会消失


有人对我如何做到这一点有什么建议吗?我不能只使用简单的自定义SQL,因为可能需要修改、替换列、添加额外条件等,或者在doCount调用中使用这些条件。

事实证明,在Criteria::addJoin;更改联接以使其为:

$c->addJoin(QuuxPeer::FIELD, 'unioned_table.foo', Criteria::INNER_JOIN);
$c->addJoin('unioned_table.bar', BazPeer::BLAH, Criteria::INNER_JOIN);

修复了该问题。

结果表明,在Criteria::addJoin;更改联接以使其为:

$c->addJoin(QuuxPeer::FIELD, 'unioned_table.foo', Criteria::INNER_JOIN);
$c->addJoin('unioned_table.bar', BazPeer::BLAH, Criteria::INNER_JOIN);
修正了这个问题