2016-05-07 11 views
2

私は私のフォーラムとそのサブフォーラムからすべてのトピックを取得しようとしています。しかし、何らかの理由で私のコードが正しく動作しません。それは私にエラーを与えませんが、間違った情報を示しています。私はメドーを使用しています。 私のフォーラムからすべてのトピックを取得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; 
} 

は、だから私のデータベースに、私はテーブルのフォーラムを持っているし、そこに私は整数であり、その値は、自分の頭のフォーラムのIDである列forum_subforumを持っている: はここに私の関数です。私はまた私の全体のフォーラムのすべてのトピックで構成されているforum_topicsテーブルを持っています。ここではtopic_forumという名前の列もあります。これも整数で、トピックが属するフォーラムのIDです。

ありがとうございました。それは非常に高く評価されます。

+0

なぜあなたは 'form_posts'に問い合わせていますか?それは 'forum_topics'ではないでしょうか? – Pevara

+0

はい、ありがとうございます。神は非常に愚かな間違い私はそれに気付かず、私はこのコードを何度も見てきました。あなたは私の人生を救った<3。 –

答えて

1

私はあなたの質問を理解しているわけではありませんが、あなたのコードからはフォーラムが持つサブフォーラムを含め、特定のフォーラムにいくつのトピックがあるか知りたいと思います。

私は、次のクエリは、まさにそれを行う必要があります信じて:

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で処理したりする代わりに、彼らに作業をさせてください。
+0

あなたは正しいですが、私は別のやり方でそれをやりました。問題はforum_topicsの代わりにforum_postsを書いたことで、何らかの理由で私はそれに気づいていませんでした。あなたの早い反応に感謝します。私はforum_topicsに名前を変更した後、すべてうまく動作します。 –

関連する問題