我正在创建一个小型论坛。
尝试运行SElECT... JOIN...
查询也会获取有关各个帖子的信息,以及最后的回复(如果有)。作为我希望以艰难的方式完成所有事情的一部分,这涵盖了五个表格(仅说明了与此问题相关的列)
评论信息参考ID | 参考类型 | 作者ID | 创造 邮政编码 | 标题 postitInfo 参考PostitID | 创建 | 作者ID 用户名 | 用户名 | 允许 用户信息参考用户ID | 标题
因此,我运行此查询SELECT... JOIN...
查询以获取最新的主题及其最后的回复。
SELECT DISTINCT
t1.id, t1.title, t2.create, t2.lastEdit, t2.authorID, t3.username,
t4.title AS userTitle, t3.permission, t5.create AS commentCreate,
t5.authorID AS commentAuthor, t6.username AS commentUsername,
t6.permission AS commentPermission
FROM rantPostit AS t1
LEFT JOIN (rantPostitInfo AS t2)
ON ( t1.id = t2.referencePostitID)
LEFT OUTER JOIN (rantUser as t3, rantUserInfo as t4)
ON (t2.authorId = t3.id AND t4.referenceUserId = t2.authorId)
LEFT OUTER JOIN (rantCommentInfo as t5, rantUser as t6)
ON (t5.referenceType = 8 AND t5.referenceID = t1.id AND t6.id = t5.authorID)
ORDER BY t2.create DESC, t5.create DESC
现在,这将返回主题帖子。假设我有两个,它返回它们都很好。假设我对第一个有 8 个回复,它将返回 9 个条目(主题 + 回复各一个,没有回复的单个条目)。所以,我想我的问题是这样的:我不知道该怎么做才能将最后LEFT OUTER JOIN
条款中的退货数量限制为最近的,或者只是将最近的退货数量排除在窗口之外。
(是的,我意识到该ORDER BY...
子句搞砸了,因为它会首先按帖子创建日期排序,然后按评论创建日期排序。是的,我意识到我可以通过在 postitInfo 中添加两个字段来简化所有问题,lastCommentCreate 和lastCommentCreateID,并在每次回复时更新它,但是......我喜欢这种艰难的方式。)
那么我做错了什么?
或者这是一个如此愚蠢的问题,我应该被带到木棚周围并用锤子敲打?