根据另一个表的活动返回一个 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_THREAD 和 frm_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 表的最新活动行的主要内容,如果未能解决你的问题,请参考以下文章
postgres - 选择另一个表的一个特定行并将其存储为列
sql 数据库中具有多个表的活动崩溃 - Android Studio