не могу понять, что не так с этим SQL-запросом - PullRequest
0 голосов
/ 14 ноября 2018

Попытка получить список последних сообщений на форуме от пользователя, упорядоченных по дате его создания.

Проблема в том, что сообщения разбиты по темам и ответам, поэтому мне нужно получить текст ответаиз другой таблицы, если последнее сообщение не относится к самой теме.

Попытка использовать CASE для переключения между подзапросом, если это ответ, в противном случае используйте текст темы.

SELECT
    t.`topic_id`,
    t.`topic_title`,
    t.`last_post_date`,
    t.`last_post_id`,
    CASE WHEN t.`replys` > 0 THEN (
    SELECT
        `reply_text` AS 'text'
    FROM
        `forum_replies`
    WHERE
        `post_id` = t.`last_post_id`
) ELSE t.`topic_text` AS 'text'
END
FROM
    `forum_topics` t
WHERE
    t.`approved` = 1 AND t.`forum_id` IN (1) AND t.last_post_user_id = 1
ORDER BY
    t.`last_post_date`
DESC
LIMIT 5

ошибка:

1064 - у вас ошибка в синтаксисе SQL;проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования

рядом с текстом 'AS' 'END FROM forum_topics t WHERE t. approved = 1 AND t`f' в строке13

1 Ответ

0 голосов
/ 14 ноября 2018

Использование подзапроса в CASE не допускается. Используйте LEFT JOIN вместо:

SELECT
    t.`topic_id`,
    t.`topic_title`,
    t.`last_post_date`,
    t.`last_post_id`,
    t.`reply_text` as 'text'
FROM
    `forum_topics` t
    LEFT JOIN `forum_replies` r on r.`post_id` = t.`last_post_id`
WHERE
    t.`approved` = 1 AND t.`forum_id` IN (1) AND t.last_post_user_id = 1
ORDER BY
    t.`last_post_date`
DESC
LIMIT 5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...