根据另一个表的活动返回一个 sql 表的最新活动行

Posted

技术标签:

【中文标题】根据另一个表的活动返回一个 sql 表的最新活动行【英文标题】:Return most recent active rows of one sql table based on activity of another table 【发布时间】:2021-09-02 00:27:03 【问题描述】:

我正在创建一个小型发帖论坛,作为一个学习项目来自学 Bootstrap/php/SQL。

主论坛的行为将显示按他们最近的回复排序的主题列表。因此,一个名为 Cookies 的主题在一分钟前有回复,它将位于一个名为 Pie 的主题之上,该主题在两天前有回复,依此类推,以此类推。

我已经构建了 2 个表,frm_THREADfrm_POST,并且已经能够编写一个 适当的连接 SQL 语句来提取我想要的数据回到一个查询而不是几个。我想推动这一点,以便 我只撤回我需要的数据,没有额外的。

现在我的 SQL 返回一个像这样有 13 行的表。

我想返回一个包含三行的表格,如此处所示。每行代表一个活动主题,主题可以按数据时间排序

我认为最终的魔力在于我如何对结果进行排序/排序,但我还没有找到正确的措辞来弄清楚如何解析出不必要的数据。我只想为每个主题返回一行,返回的行应该是最近的活动行,它是查询的两个表的组合,可以按日期时间排序,以便我可以正确显示活动 - 显示最首先是活跃的/感兴趣的。发布表,其中包含最近活动的日期/时间戳,然后可用于对主题 ID/名称进行排序——为简洁起见,我删除了主题名称和发布 cmets 等内容。我尝试创建一个简单的准系统位的 SQL 专注于我需要做的事情,一旦我有了最终的解决方案,我就可以对其进行扩展。

这是我当前状态的 SQL。

SELECT       t.ThreadID,  t.isTITLE, 
             p.postID, p.isACTIVE, p.dateCREATED 
FROM         frm_THREAD   AS   t
INNER JOIN   frm_POST     AS   p 
ON           t.ThreadID   =    .threadID
ORDER BY     p.dateCREATED, t.ThreadID

总结:我想返回代表每个主题的一行,这些行根据活动进行排序,活动由帖子表中的响应回复的时间戳确定。

这是我正在绘制的线程表和 POST 表 - 黄色高亮显示我特别试图从 frm_POST 数据中提取的数据,并将其与 frm_THREAD 数据合并

【问题讨论】:

用您正在使用的数据库标记您的问题。 我正在使用上面提到的 SQL “Bootstrap/PhP/SQL” 不知道你所说的标签是什么意思?当我发布问题时,我选择了“SQL”,这是我用于数据库的 - 我非常新/自学/探索 【参考方案1】:

你可以使用row_number():

SELECT ThreadID, isTITLE, postID, isACTIVE, dateCREATED
FROM (SELECT t.ThreadID, t.isTITLE, p.postID, p.isACTIVE, p.dateCREATED,
             ROW_NUMBER() OVER (PARTITION BY t.ThreadID ORDER BY p.DateCreated DESC) as seqnum
      FROM frm_THREAD t JOIN
           frm_POST p 
           ON t.ThreadID = p.threadID
     ) pt
ORDER BY p.dateCREATED, t.ThreadID;

【讨论】:

我在Adminer中运行了这个SQL来测试它,得到一个错误。我打破了 SQL 试图深入挖掘以试图找出错误但没有太多运气解决它:SELECT ThreadID, isTITLE, postID, isACTIVE, dateCREATED FROM (SELECT t.ThreadID, t.isTITLE, p.postID, p.isACTIVE , p.dateCREATED, ROW_NUMBER() OVER (PARTITION BY t.ThreadID ORDER BY p.DateCreated DESC) as seqnum FROM_THREAD AS t JOIN frm_POST AS p ON t.ThreadID = p.threadID 通过一些语法检查器和类似的东西运行它,并收到一个报告,表明这部分语句“(PARTITION BY t.ThreadID ...”语法似乎很好,我在想它可能是 PARTITION BY? - 深入研究,感谢任何帮助 - 感谢您迄今为止的帮助 Gordon!

以上是关于根据另一个表的活动返回一个 sql 表的最新活动行的主要内容,如果未能解决你的问题,请参考以下文章

限制一个 sqlite 表的最大行数

postgres - 选择另一个表的一个特定行并将其存储为列

将按日期较早/较晚的最近相邻行返回到另一个表的日期

sql 数据库中具有多个表的活动崩溃 - Android Studio

SQL语句循环一张表的一个字段ID,根据这个字段的内容去修改另一张表,

sql 读取特定表的活动统计信息