2016-05-07 58 views
2

我試圖從我的論壇和子論壇中獲得所有主題。但是,由於某些原因,我的代碼無法正常工作。它不會給我任何錯誤,但會顯示錯誤的信息。我正在使用medoo。 這裏是我的功能:從我的論壇中獲取所有主題他們在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; 
} 

所以在我的數據庫中,我有一個表論壇,在那裏我有一個列forum_subforum這是一個整數,它的價值是他們的頭論壇的ID。我還有一個forum_topics表,它由我整個論壇中的所有主題組成,其中有一個名爲topic_forum的列,它也是整數,並且是該主題所屬論壇的標識。

謝謝你的幫助。非常感謝。

+0

你爲什麼要查詢'form_posts'?那應該不是'forum_topics'? – Pevara

+0

是的你是對的謝謝你。上帝非常愚蠢的錯誤,我甚至沒有注意到它,並且我經歷了很多次這個代碼。你救了我的命<3。 –

回答

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中進行處理。
+0

你是對的,但我以不同的方式做到了。它的問題在於我寫了forum_posts而不是forum_topics,出於某種原因,我甚至沒有注意到它。感謝您的快速反應。在我將其重命名爲forum_topics後,一切正常。 –