讲论坛的留言在SQL里自动生成一个表
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了讲论坛的留言在SQL里自动生成一个表相关的知识,希望对你有一定的参考价值。
我想做个程序,可以收集论坛里的用户ID,留言,发表时间等信息,在数据库自动生成一个表,求指导
参考技术A 你是此网站论坛的管理员吗,如果是此网站论坛的管理员,你可以直接修改论坛的代码,在别人发表留言的时候,进行记录,如果你不是此网站论坛的管理员,你可以通过截取网页代码字段来存储到你自己的数据库,第二种需要编写程序不停的去扫描别人的网站追问第二种吧,我看过网页的原代码,找不到规律,不知道截取那部分好。
追答截取你需要的字段啊,例如名字啊,留言的内容啊等等,这些都是有规律可循的
追问代码那边不知道怎么判断。。
代码那边不知道怎么判断。。
追答你可以获取页面源码,然后截取,截取你所需要的字符,从某个字符截取到某个字符
参考技术B 这个要用到很多知识 。 当对方网页Request的时候 或者在往数据库UPDATA 的时候 才能提取别人的提取的消息 一般的论坛的数据库里都是有记录的 。 你自己SELECT 看看 参考技术C 修改网站的代码,用代码写入数据库追问修改求思路。网页源代码,不知道什么时候该截取什么时候不该截取。都是文本格式,但是有些该截取有些又不要截取
根据另一个表的活动返回一个 sql 表的最新活动行
【中文标题】根据另一个表的活动返回一个 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里自动生成一个表的主要内容,如果未能解决你的问题,请参考以下文章