Witam.
Mam takie oto zapytanie w serwisie blogowym:
SELECT `Comment`.`id`, `Comment`.`parent_id`, `Comment`.`comment`, `Comment`.`created`, FROM `comments` AS `Comment` WHERE `post_id` = 1 AND `visible` = 1
ORDER BY created asc
Zapytanie to wyciąga komentarze przypisane do danego postu. Komentarze mogą być zagnieżdżone, tj. użytkownicy mogą umieścić odpowiedź do danego komentarza (stąd pole 'parent_id').
Problem polega na tym, że użytkownicy mają możliwość ustawienia sobie sortowania listy komentarzy, między asc i desc.
W przypadku sortowania asc jest wszystko OK, natomiast jeśli chodzi o sortowanie desc - czyli przypadek gdzie najnowsze komentarze wyświetlane są na początku - wyniki zapytania, poprzez sortowanie desc, wyglądają tak, że odpowiedź na dany komentarz, umieszczona później niż inna odpowiedź na ten sam komentarz - wyświetla się jako pierwsza.
Chciałam to zmodyfikować - tak aby w przypadku sortowania komentarzy po dacie malejąco - komentarze będące odpowiedzią (czyli z polem parent_id różnym od NULL) sortowały się w sposób rosnący (czyli najnowsze odpowiedzi na końcu listy odpowiedzi na dany komentarz).
Spróbowałam umieścić klauzulę IF w ORDER BY następująco:
SELECT `Comment`.`id`, `Comment`.`parent_id`, `Comment`.`comment`, `Comment`.`created`, FROM `comments` AS `Comment` WHERE `post_id` = 1 AND `visible` = 1
ORDER BY IF parent_id IS NULL THEN created desc ELSE created asc END
czyli - w przypadku gdy parent_id jest nullem (komentarz nie jest odpowiedzią) ma się sortować malejąco, ale w innym przypadku (gdy komentarz jest odpowiedzią) - ma się sortować rosnąco.
Niestety w wyniku tego zapytania otrzymałam błąd:
Error: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'parent_id IS NULL THEN created desc ELSE created asc END' at line 1
Gdzieś wyczytałam, że klauzuli ASC i DESC nie można używać w IFie czy CASE'ie.
Jaki może być sposób na obejście tego problemu?
Z góry dziękuję za pomoc:)