2017-01-02 16 views
0

私は、MySQLと正常に実行するクエリがある:意味論的エラー、symfonyのDQL

SELECT * 
FROM td_user u 
JOIN td_ranking ranking ON ranking.user_id = u.id 
JOIN (
SELECT x.user_id, 
MAX(x.id) AS default_id 
FROM td_ranking x 
GROUP BY x.user_id 
) y 
ON y.user_id = ranking.user_id 
AND y.default_id = ranking.id 

私はsymfonyで実行、それをするためにDQLでそれを変換しよう:

$query = $this->_em->createQuery(' 
    SELECT u.*,ranking.* 
    FROM UserBundle:User u 
    JOIN UserBundle:Ranking ranking 
    WITH ranking.user_id = u.id 
    JOIN (
    SELECT x.user_id, MAX(x.id) AS default_id 
    FROM UserBundle:Ranking x 
    GROUP BY x.user_id 
) y 
    ON y.user_id = ranking.user_id 
    AND y.default_id = ranking.id' 
); 
$results = $query->getResult(); 

私はこのエラーがあります:

[意味論的エラー]行0、列113に近い '(、x.user_idをSELECT':エラー:クラス '(' が定義されていません

あなたはどんな考えがありますか?ありがとう!あなたはランキングエンティティのためのuser_idプロパティを持っていない

+1

。 –

+0

ああそう...しかし、それをどうやって?私はこれを試してみたが、結果は同じです。 " をuをSELECT *、ランキング* UserBundle FROM:ユーザUはUserBundleのJOIN :ランキングranking.user_id = u.id WITH ランキングは、JOIN( SELECT x.userを、MAX(x.id)はAS default_id UserBundle FROM:x.user BYランキングX GROUP)y.user = ranking.user ON Y AND y.default_id = ranking.id」実際に – Tom59

+0

、IはOneToManyを有しますユーザーとランキングの関係。多くのランキングはユーザーにリンクできます。私の要求では、各ユーザーの最後のランキングを取得したいと思います...あなたはアイディアを持っていますか? – Tom59

答えて

2

使用ネイティブクエリ

$rsm = new ResultSetMapping(); 
$sql = " 
    SELECT * 
FROM td_user u 
JOIN td_ranking ranking ON ranking.user_id = u.id 
JOIN (
SELECT x.user_id, 
MAX(x.id) AS default_id 
FROM td_ranking x 
GROUP BY x.user_id 
) y 
ON y.user_id = ranking.user_id 
AND y.default_id = ranking.id 
"; 

$result = $this->getEntityManager()->createNativeQuery($sql, $rsm)->getResult(); 
+0

ありがとう!しかし、私はこのエラーを持っています。SELECT 「名前によって指定されたネイティブクエリを見つけることができませんでした* td_user Uからはranking.user_id = u.id 、JOIN(x.user_idを選択、 MAX(x.id ONランキングtd_ranking登録しよう )y.user_id = ranking.user_id AND y.default_id = ranking.id ON AS)x.user_id BY td_ranking X グループから default_id Y」を – Tom59

+1

更新ANSを使用してくださいTom59 @更新ANS –

+1

を使用してください。 –

関連する問題