我正在学习php,因为我一直在这里,我完全迷失了。我以前从未真正使用过加入,我想我需要在这里,但我不知道。我不希望任何人为我做这件事,但如果你能指出我正确的方向,这将是惊人的,我已经尝试阅读加入,但有20种不同的方法,我只是迷失了。 / p>
基本上,我手工编写了一个论坛,它工作正常,但效率不高。
我有board_posts(用于帖子)和board_forums(用于论坛,类别以及部分)。
我正在重做的部分是我如何获取索引页面的最后一篇文章的信息。我设置它的方式是为了避免使用连接,我将它存储在board_forums表中的最新帖子的信息,所以说有一个名为“关闭主题”的部分我会有一个“forum_lastpost_username / userid”的字段/ posttitle / posttime“当用户发布等时我会更新。但这很糟糕,我试图动态地抓住它们并摆脱这些字段。
现在我的查询就像:
`SELECT * FROM board_forums WHERE forum_parent='$forum_id''
然后我有一些东西,我抓住该论坛的信息(名称,描述等),最后一篇文章的所有数据都在那里:
$last_thread_title = $forumrow["forum_lastpost_title"];
$last_thread_time = $forumrow["forum_lastpost_time"];
$lastpost_username = $forumrow["forum_lastpost_username"];
$lastpost_threadid = $forumrow["forum_lastpost_threadid"];
但我需要摆脱它,并从board_posts获取它。在board_posts中设置的方式是,如果它是一个线程,post_parentpost是NULL,如果它是一个回复,那么该字段具有该线程的id(该主题的第一篇文章)。所以,我需要获取最新的post_date,看看哪个用户发布了那个,那么看看parentpost是否为NULL(如果它为null,那么最后一个帖子是一个新线程,所以我可以获得标题和用户的所有信息,但是如果不是,那么我需要获得该帖子中第一篇帖子的信息(标题,id)(可以通过查看post_parentpost是什么来查找,查找该ID并从中获取标题。
这有什么意义吗?如果是这样,请帮助我:(
非常感谢任何帮助!!!!
答案 0 :(得分:3)
每当插入帖子或回复时更新board___forums是 - 关于性能 - 不是最坏的想法。要显示索引页面,您只需从一个表board_forums中选择数据 - 这肯定比选择第二个表来获取“最后帖子”信息要快得多,即使使用聪明的连接也是如此。
答案 1 :(得分:1)
你最好只更新每个动作,新帖子,删除帖子等的统计数据。
其他实例不太可能需要更新任何统计信息(删除线程会触发论坛更新,在主题计数中显示少一个主题)。
考虑用户将要执行的所有操作,在大多数情况下,您不需要更新任何统计信息,因此,即时获取计数效率非常低,您认为是正确的。
答案 2 :(得分:1)
看起来你已经做了正确的事。
如果你要加入,你可以这样做:
SELECT * FROM board_forums
JOIN board_posts ON board_posts.forum_id = board_forums.id
WHERE forum_parent = '$forum_id'
问题在于,它会让你每个帖子,这是没用的(而且很慢)。你想要做什么就是这样
SELECT * FROM board_forums
JOIN board_posts ON board_posts.forum_id = board_forums.id ORDER BY board_posts.id desc LIMIT 1
WHERE forum_parent = '$forum_id'
除了SQL不能那样工作。你不能订购或限制连接(或做许多其他有用的事情),所以你必须获取每一行,然后用代码扫描它们(这很糟糕)。
总之,不用担心。对于您希望在一次点击中加载所有论坛和所有帖子的实际案例,请使用联接。答案 3 :(得分:0)