gpt4 book ai didi

php - 获取主题+上一个发帖者的用户名

转载 作者:行者123 更新时间:2023-11-30 23:36:49 25 4
gpt4 key购买 nike

所以,我正在写一个小论坛,我想列出以下内容

  • 线程主题
  • 发起话题的用户名
  • 开始日期
  • 最后一个在主题中写的人的用户名
  • 上次发帖日期

我为此准备了三个表

帐户

+---------------+
| id | username |
|---------------+
| 1 | blargh |
| 2 | hest |
+---------------+

线程

+----+-------+------+---------+
| id | topic | user | thedate |
+----+-------+------+---------+
| 5 | Yarr | 1 | bleh |
+-------------------+---------+

帖子

+----+---------+------+---------+--------+
| id | content | user | thedate | thread |
+----+---------+------+---------+--------+
| 8 | aaaa | 1 | aadate | 5 |
+----+---------+------+---------+--------+
| 9 | bbbb | 2 | bbdate | 5 |
+----+---------+------+---------+--------+

我想要什么:

+----+-------+----------+---------+--------------------+----------------+
| id | topic | username | thedate | last_post_username | last_post_date |
+----+-------+----------+---------+--------------------+----------------+
| 5 | Yarr | blarg | bleh | hest | bbdate |
+----+-------+----------+---------+--------------------+----------------+

这是我到目前为止得到的:

SELECT
forum_threads.id AS id,
forum_threads.topic AS topic,
forum_threads.time AS time,
accounts.username AS username,
Max(forum_posts.id) AS latest_post_id,
forum_posts.`user` AS `user`,
forum_posts.timeposted AS last_post_time
FROM
((forum_threads
JOIN forum_posts ON ((forum_posts.thread = forum_threads.id)))
JOIN accounts ON ((forum_threads.`user` = accounts.id)))

我似乎无法获得最后一个发帖人的用户名和发帖时间

最佳答案

首先——我在您的架构中没有看到任何将帖子链接到话题的内容。我的回答是假设 posts 中有一个名为 threadid 的附加列。

我见过的针对此问题的最常见解决方案是跟踪 threads 表中最新帖子的 ID(可能还有用户 ID 和用户名)。如果您只需要 ID,就可以轻松获得最新的帖子:

SELECT threadid, MAX(id) FROM posts WHERE <...> GROUP BY threadid

但是没有有效的方法从该查询中获取关联的时间或用户 ID。我能得到的最接近的是这个烂摊子:

SELECT threadid, id, user, username, thedate FROM posts
WHERE posts.id IN (
SELECT threadid, MAX(id) FROM posts WHERE <...> GROUP BY threadid
)

这在 MySQL 上效率极低——优化器在使用 GROUP BY 的子查询上完全崩溃。 (在少于一百个线程的测试数据库上,查询大约需要 300 毫秒。)咬住你的舌头,通过存储线程中最新帖子的信息来对数据库进行非规范化,一切都会好起来的。

关于php - 获取主题+上一个发帖者的用户名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6721785/

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