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のDQLlanguajeを試すことができます。

$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 に答える