2017-01-02 3 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 

я стараюсь, чтобы превратить его в DQL для запуска в Symfony:

$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 вблизи '(SELECT x.user_id,': Ошибка:. Class '(' не определен

У вас есть идеи, пожалуйста? Благодаря!

+1

Вы не user_id свойства для Ранжирования лица. –

+0

О да ... Но как это сделать? Я стараюсь это, но результат один и тот же: ". ВЫБРАТЬ и *, рейтинг * FROM UserBundle:. Пользователь у РЕГИСТРИРУЙТЕСЬ UserBundle: Ранжирование рейтинг С ranking.user_id = u.id JOIN ( ВЫБОР x.user , MAX (x.id) КАК default_id ОТ UserBundle: Ранжирование х GROUP BY x.user) у ПО y.user = ranking.user И y.default_id = ranking.id» – Tom59

+0

на самом деле, у меня есть OneToMany Связь между пользователем и ранжированием. Многие Ranking могут быть ссылками на пользователя. В моей просьбе я хочу получить последний рейтинг каждого пользователя ... У вас есть идея, пожалуйста? – 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 * FROM td_user у РЕГИСТРИРУЙТЕСЬ td_ranking рейтинг ON ranking.user_id = u.id JOIN (SELECT x.user_id, MAX (x.id) КАК default_id ОТ td_ranking х GROUP BY x.user_id) у = О y.user_id ranking.user_id И y.default_id = ranking.id» – Tom59

+1

Пожалуйста, используйте обновление ANS –

+1

@ Tom59 Пожалуйста, используйте обновленные ANS. –

 Смежные вопросы

  • Нет связанных вопросов^_^