2011-12-19 2 views
-1

나는 php/mysql 포럼을 만들고 있으며 두 개의 테이블을 가지고 있습니다. 첫 번째는 마스터 '스레드'테이블이고 두 ​​번째 테이블은 '제목', 'body_text'등과 같은이 질문과 관련이없는 일부 열을 생략 한 응답 구조 테이블입니다.포럼의 스레드와 최신 답을 선택하십시오

  1. thread_table 열 :

    • 아이디 (INT, 기본 키)
    • USER_ID (int)를
    • 삭제 (부울/tiny_int)
    • date_posted (날짜)
  2. reply_table열 :

    • 아이디 (INT, 기본 키)
    • linked_to (int)를
    • USER_ID (int)를
    • 삭제 (부울/tiny_int)
    • date_posted (날짜)

나는 정말 내 SQL에 붙어있어, 나는 모든 '스레드', 최신 '회신'을 선택하고 싶습니다. 쓰레드가 1과 같지 않은 쓰레드 당, 그리고 쓰레드가 1이 아닌 각 쓰레드에 대한 응답의 총 카운트를 표시합니다. 그리고 맨 위에는 사용자 테이블에서 'user_name'을 선택하고 싶습니다. 여기서 thread/reply ' user_id '는 user 테이블의 동일한 id와 같습니다.

+0

이 질문에 1 개의 쿼리를 사용 하시겠습니까? 불가능하지는 않더라도 지저분 할 것입니다. 작은 조각으로 이것을 다루는 것이 더 낫습니다. –

+0

제안에 개방적입니다. 하나의 커다란 지저분한 쿼리를 사용하기위한 요구 사항이 아니며, 두 가지로 나누어서 첫 번째 결과를 통해 또는 무엇이든 반복해서 드리겠습니다. –

답변

1

귀하의 아이디에 auto_increment를 사용한다고 가정합니다. 따라서 가장 높은 숫자는 항상 마지막 답장입니다.

아래 코드는 테스트를 거치지 않은 이지만주의해야합니다. 단계를 주석 처리 했으므로 어디에서 무슨 일이 벌어지는 지 확인할 수 있습니다. 희망이 당신을 도와줍니다!

//Fetch the thread headers and put result in array 
$get_header = "SELECT thread.id, user.user_name, thread.date_posted FROM thread_table thread, user_table user WHERE thread.user_id = user.user_id AND thread.deleted != 1;"; 
    $Rget_header = mysql_query($get_header) or die(mysql_error()); 

    while($row_get_header = mysql_fetch_array($Rget_header)){ 
      $arr_get_header[] = array("thread_id" => $row_get_header['id'], 
             "username" => $row_get_header['user_name'], 
             "date_posted" => $row_get_header['date_posted'] 
            ); 
    } 

//Loop through the header array 
for ($c = 0; $c < count($arr_get_header); $c++){ 

    //Fetch the count 
    $count_replies = "SELECT COUNT(id) as reply_count FROM reply_table WHERE linked_to = '".$arr_get_header[$c]['thread_id']."';"; 
     $Rcount_replies = mysql_query($count_replies) or die(mysql_error()); 

     $num_count_replies = mysql_num_rows($Rcount_replies); 

      if ($num_count_replies == 1) { 
       $obj_get_reply = mysql_fetch_object($Rcount_replies); 
      } 

    //Get last reply 
    $get_reply = "SELECT MAX(reply.id) as reply_id, user.user_name, reply.date_posted FROM reply_table reply, user_table user WHERE reply.user_id = user.id AND reply.deleted != 1 AND reply.linked_to = '".$arr_get_header[$c]['thread_id']."' ORDER BY reply_id;"; 
     $Rget_reply = mysql_query($get_reply) or die(mysql_error()); 

     $num_get_reply = mysql_num_rows($Rget_reply); 

      if ($num_get_reply == 1) { 
       $obj_get_reply = mysql_fetch_object($Rget_reply); 
      } 

    //Echo result 
    echo 'Thread id: '.$arr_get_header[$c]['thread_id'].'<br />'; 
    echo 'Last reply id: '.$obj_get_reply->reply_id.'<br />'; 
    echo 'Reply count: '.$obj_count_replies->reply_count.'<br />'; 

} 
+0

안녕하세요. 고마워, 그걸로 연극을 할게. (늦었네.) –

+0

행운? 이게 당신의 문제를 해결 했나요? 그렇다면 대답으로 받아 들여주세요 :) – GuZzie

관련 문제