gpt4 book ai didi

mysql - 不计算 "LIMIT"中的某些列

转载 作者:行者123 更新时间:2023-11-29 17:53:30 25 4
gpt4 key购买 nike

我有一个系统,其中可以有“帖子”、对帖子的“评论”以及对其他评论的“评论”。将其视为一个非常简化的 Facebook 评论系统。

为了支持数据,我选择使用一张表来存储帖子和评论,因为它们的结构几乎相同:

ID(评论或帖子)| TopParentID(如果是帖子,则与 ID 相同,如果是评论,则与帖子 ID)| DirectParentID(如果是帖子,则为 0;如果是帖子 ID,则为帖子 ID,如果是评论,则为父评论 ID)|还有一些帖子和评论相同的字段

我想要实现的目标:例如,选择前 20 篇帖子。但是,对于帖子,还要选择该帖子的评论。

我知道这听起来像是与另一个表的 JOIN 比只有一个表更优化,但我认为让帖子和评论使用相同的 ID 计数器会更有利,以使其更容易查找对帖子的直接评论以及对帖子评论的评论。

但是,我不知道如何使用上面的表设计来设计我的查询;我需要选择 DirectParentID = 0 的前 x 行,以及 TopParentID = 每个选定行的帖子 ID 的行。

我到底应该改变我的表格设计吗?

最佳答案

你可以这样做:

SELECT *
FROM t
WHERE topParentId IN (SELECT id
FROM t
WHERE directParentId = 0
AND id <= 20);

LIMIT 不能在子查询中使用,因此您需要一个 where 子句来过滤掉您的父帖子(可能按日期或用户或其他内容)。

如果你想使用限制,你可以使用“自连接”,如下所示:

SELECT t.*
FROM (SELECT *
FROM t
WHERE t.did = 0
LIMIT 20) AS t1
INNER JOIN t
ON t.tid = t1.id;

你的设计没有任何问题。自引用表很常见。您可以认为您的表包含“可评论对象”,评论和帖子都可以归入其中。但是,对于将帖子和评论视为单个实体的表,创建将帖子和评论视为两个单独实体的查询可能会更困难/更复杂(至少,对我来说就是这样:))

关于mysql - 不计算 "LIMIT"中的某些列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49088016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com