0

我想在学说中进行这个 sql 查询:

SELECT * 
FROM (
  (SELECT *, e1.stop_date as sort_date FROM `event` e1 WHERE ...) 
  UNION 
  (SELECT *, e2.start_date as sort_date FROM `event` e2 WHERE ...)
) e3 
ORDER BY e3.sort_date 

我想将 symfony 模型的结果连接到事件表,比如使用:

Doctrine_Core::getTable('Event')->createQuery('e')

有任何想法吗?

4

1 回答 1

5

您可以尝试 Doctrine 的 DQL languaje 进行复杂查询:

$q = Doctrine_Query::create()
        ->select('u.id')
        ->from('User u')
        ->where('u.id NOT IN (SELECT u2.id FROM User u2 INNER JOIN u2.Groups g)');

echo $q->getSqlQuery();

http://doctrine.readthedocs.org/en/latest/en/manual/dql-doctrine-query-language.html#subqueries

或者,或者,您可以在数据库中创建一个视图并将其用作更简单的 Doctrine 查询的源表。

CREATE VIEW view_name AS
SELECT * 
FROM (
  (SELECT *, e1.stop_date as sort_date FROM `event` e1 WHERE ...) 
  UNION 
  (SELECT *, e2.start_date as sort_date FROM `event` e2 WHERE ...)
) e3 
ORDER BY e3.sort_date 

我在我的项目中使用了这两种方法并且效果很好,这取决于您访问数据的方式,是否需要更新,是否允许您创建视图等。

于 2012-06-11T15:04:12.623 回答