2013-04-01 2 views
4

Im пытается сделать блог, который отображает все комментарии, и пользователь сможет оставлять комментарии к ответу на ранее размещенные комментарии no, чтобы заказывать тогда в sql-запросе, чтобы они будет отображаться в порядке, я продолжаю получать ошибку.IF Statement в заказе по запросу Doctrine 2 Symfony 2

SELECT c.userid, c.comment, c.reply, u.username, c.createdat, c.image, c.username as 
ComUser FROM Bundle:Comments c LEFT JOIN Bundle:Users u WITH c.userid = u.id 
WHERE c.articleid = 1 ORDER BY (CASE WHEN (c.parentid = 0) THEN c.id ELSE c.parentid END) 
c.createdat ASC 

дает ошибку: [Синтаксис Error] строка 0, столбец 515: Ошибка: Ожидаемый конец строки, получил 'ДЕЛО'

даже пытался нормальный путь

ORDER BY IF(c.parentid = 0, c.id, c.parentid), c.createdat ASC 

дает ошибку: [ Синтаксическая ошибка] line 0, col 515: Ошибка: ожидаемый конец строки, got '('

Когда я использую обычный код ORDERY BY IF() в нормальном коде sql (не доктрина), он отлично работает.

+0

Предположите опечатку? ELSE .parentid END - должен быть c.parentid ... – sgeddes

ответ

6

похоже, что у вас только опечатка. Ваш общий синтаксис верен.

ORDER BY CASE WHEN (c.parentid = 0) THEN c.id ELSE .parentid END c.createdat ASC 

должен быть

ORDER BY CASE WHEN (c.parentid = 0) THEN c.id ELSE c.parentid END, c.createdat ASC 
+0

Спасибо, Извините, только что сделал опечатку, но все равно получаю ту же ошибку. – Louwki

+0

@BoereУ вас не хватает запятой после 'END'. Я обновил свой ответ –

+0

спасибо, ребята, вы спасли мой день :) –

3

Awsome !!! Спасибо за помощь, ребята, я только что получил!

Мое решение:

SELECT c.userid, c.comment, c.reply, u.username, c.createdat, c.image, c.username as 
ComUser, (CASE WHEN (c.parentid = 0) THEN c.id ELSE c.parentid END) as OrderByComm 
FROM Bundle:Comments c LEFT JOIN Bundle:Users u WITH c.userid = u.id 
WHERE c.articleid = 1 ORDER BY OrderByComm, c.createdat ASC 

Я сделал заказ по расчету в избранной части.

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