0

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();
4

1 に答える 1

3

これを試してみてください

$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("COALESCE( u.timeCreated, p.timeCreated )", "DESC")
  ->setMaxResults(28)
  ->getQuery();
于 2012-12-17T23:58:40.403 に答える