无法找出这个SQL查询有什么问题

时间:2018-11-14 13:37:07

标签: mysql pdo

试图从用户那里获取最新的论坛帖子列表,按发布日期排序。

问题在于帖子是在主题和答复之间划分的,因此,如果最新的帖子不是主题本身,那么我需要从不同的表中获取答复文本。

如果要答复,则尝试使用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。approved = 1和t.f在第13行

1 个答案:

答案 0 :(得分:0)

不允许在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