【问题标题】:Get all topics from my forums their sub-forums in medoo从我的论坛他们在 medoo 的子论坛中获取所有主题
【发布时间】:2016-09-02 19:12:23
【问题描述】:

我正在尝试从我的论坛和其中的子论坛中获取所有主题。但是,由于某种原因,我的代码无法正常工作。它没有给我任何错误,但它显示了错误的信息。我正在使用medoo。 这是我的功能:

public function getForumTopicsCount($forumId)
{
    $getForumTopicsCount = $this->db->count('forum_topics', [
        "topic_forum" => $forumId
    ]);

    $subForums = $this->db->query("SELECT * FROM `forums` WHERE forum_subforum = $forumId")->fetchAll();
    $c = 0;
    foreach($subForums as $subForum) {
        $subForumTopics = $this->db->query("SELECT * FROM `forum_posts`")->fetchAll();
        foreach($subForumTopics as $topic) {
            if ($subForum['forum_id'] == $topic['topic_forum']) {
                $c++;
            }
        }
    }
    return $getForumTopicsCount + $c;
}

所以在我的数据库中,我有一个表 forums,并且有一个 forum_subforum 列,它是一个整数,它的值是他们的主论坛的 id。我还有一个 forum_topics 表,其中包含整个论坛中的所有主题,其中我有一个名为 topic_forum 的列,它也是整数,是该主题所属论坛的 id。

感谢您的帮助。非常感谢。

【问题讨论】:

  • 你为什么要查询form_posts?那不应该是forum_topics吗?
  • 是的,谢谢。上帝非常愚蠢的错误我什至没有注意到它,我已经多次阅读了这段代码。你救了我的命

标签: php mysql forum medoo


【解决方案1】:

我不能 100% 确定我理解您的问题,但从您的代码中我猜您想知道给定论坛中有多少主题,包括该论坛可能有的任何子论坛。

我相信以下查询应该做到这一点:

select count(*) from forum_topics
right join forums on forum_topics.topics_forum = forums.id
where forums.forum_id = :id or forums.forum_subforum = :id

请允许我对您的代码发表一些评论:

  • 避免使用select *,除非您确实需要所有数据。将您的查询限制在您需要的范围内。
  • 使用准备好的语句,而不是像您那样使用变量组合查询。如果您收到的 $formId 来自不安全的来源,这可能会构成安全线程。
  • 在循环内运行查询时要小心。你应该问问自己这是否真的有必要。在这种情况下,一个查询就足够了
  • 比较和搜索大型集合中的数据是数据库的设计目的。尽可能让他们完成工作,而不是获取大量数据并在 php 中进行处理。

【讨论】:

  • 你是对的,但我以不同的方式做到了。问题是我写了 forum_posts 而不是 forum_topics 并且出于某种原因我什至没有注意到它。感谢您的快速反应。将其重命名为 forum_topics 后,现在一切正常。
猜你喜欢
  • 1970-01-01
  • 2019-11-02
  • 1970-01-01
  • 2012-10-28
  • 1970-01-01
  • 1970-01-01
  • 2017-06-30
  • 2016-04-14
  • 1970-01-01
相关资源
最近更新 更多