0
我有一個基於學說的應用程序,我想從兩個單獨的表中選擇行並按創建日期排序。我(在某種程度上)實現這種方式現在:Mixing LEFT JOIN結果MySQL Doctrine
$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();
我想對於產品和用戶數據進行混合,通過創建日期排序,但排序不正確。我也嘗試使用兩個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();
教義的QueryBuilder的拋出異常,但我會盡量找沒有使用QB的合併COALESCE的解決方法。 – CaptainStiggz
恕我直言u.timeCreated或p.timeCreated其中之一將始終爲NULL。添加兩者都會導致NULL。也許IFNULL應該工作,而不是COALESCE –
是的,這是正確的。我認爲COALESCE/IFNULL是正確的做法...現在在教條中實施... – CaptainStiggz