2つの別々のテーブルから行を選択し、作成日順に並べたいという教義に基づいたアプリケーションがあります。私は今、この方法でそれを達成しています:
$query = $em->createQueryBuilder()
->from('Embed', 'e')
->select("e")
->leftJoin("User", "u", "WITH", "e.uid=u.id")
->leftJoin("Product", "p", "WITH", "e.pid=p.id")
->where("u.image > 0 OR p.image > 0")
->addOrderBy("u.timeCreated + p.timeCreated", "DESC")
->setMaxResults(28)
->getQuery();
製品とユーザーのデータを混合して作成日順に並べたいのですが、順序が間違っています。また、2つのaddOrderByステートメントを使用してみました。これは、ユーザーと製品を正しく注文しますが、すべてのユーザーを混合するのではなく、結果の最初に配置します。
編集:サー・ルフォは正しいアプローチをとっていました-これが作業コードです:
$query = $em->createQueryBuilder()
->from('Embed', 'e')
->select("e")
->leftJoin("User", "u", "WITH", "e.uid=u.id")
->leftJoin("Product", "p", "WITH", "e.pid=p.id")
->addSelect('COALESCE( u.timeCreated, p.timeCreated ) as timeCreated')
->where("u.image > 0 OR p.image > 0")
->orderBy("timeCreated", "DESC")
->setMaxResults(28)
->getQuery();