试图从用户那里获取最新的论坛帖子列表,按发布日期排序。
问题在于帖子是在主题和答复之间划分的,因此,如果最新的帖子不是主题本身,那么我需要从不同的表中获取答复文本。
如果要答复,则尝试使用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行
答案 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