2011-12-15 5 views
2

안녕하세요, while 루프 중에 데이터베이스 테이블 "shout_out"을 쿼리하려고하는데, "convers_id"컬럼이 no_reply에서 변경되었는지 점검 할 if 문이 있습니다. 만약 내가 다른 쿼리를 실행하고 같은 "convers_id"열을 가지고 shout_out_reply 테이블에서 모든 행을 얻을 싶어요. 나는 페이스 북 "벽"과 비슷한 레이아웃을 얻으려고 노력하고 있습니다. 어떤 사람은 댓글을 달고 다른 사람은 원래 댓글 아래의 답글을 사용하여 해당 댓글에 답글을 달 수 있습니다.mysql 쿼리에서 mysql 쿼리를 실행하십시오.

계속 mysqli_query ($ dbc, $ query_shout_out_reply)가 실패했습니다. 그러나 응답의 같은 "convers_id"

$query_shout_out = "SELECT * FROM shout_out WHERE sent_to = '$username' "; 
$shout_out_query = mysqli_query($dbc, $query_shout_out); 

if (mysqli_num_rows($shout_out_query) != 0) { 
    while ($row = mysqli_fetch_array($shout_out_query)) { 
     echo '<td class="shout_out_display" width="550">'; 
     echo $row['message'] . ' <br/><br/> From ' . $row['sent_by'] . ' at ' . $row['date_sent']; 
     echo '</td></tr>'; 
     echo $row['convers_id']; 
     if ($row['convers_id'] != "no_reply") { 
      $query_shout_out_reply = "SELECT * FROM shout_out_reply WHERE convers_id = " . $row['convers_id']; 
      $shout_out_reply_query = mysqli_query($dbc, $query_shout_out_reply); 

      while ($reply_row = mysqli_fetch_array($shout_out_reply_query)) { 
       echo ' <tr width="550"><td width="125" > &nbsp </td>'; 
       echo '<td width="425" class="shout_out_reply_display">'; 
       echo $reply_row['message'] . '<br/><br/>Reply From ' . $reply_row['sent_by'] . ' at ' . $reply_row['date_sent']; 
       echo '</td></tr>'; 
      } 
     } 

    } 
} 
+2

답변을 드릴 시간이 없지만 일반적으로 루프에서 쿼리를 실행하는 것은 좋지 않습니다. –

+0

무엇이 실패 했습니까? 행이 반환되지 않았습니까? – Robert

+0

방금 ​​var_dump()를 수행 할 때 Boolean이 실패했다고 말합니다. – Cjueden

답변

1
SELECT * FROM shout_out AS so LEFT JOIN shout_out_reply AS sor ON sor.convers_id = so.convers_id WHERE so.sent_to = '$username' AND so.convers_id != 'no_reply' 

여기서 핵심은 SQL 문을 조인을 사용하는 것입니다 함께있다. 하나의 명령문에서 두 테이블의 결과를 제공합니다. ... 그러면 루프를 통과 할 필요가 없습니다. 모든 SQL 요청을합니다.

+0

내 테이블이 그렇게 설정되었습니다. sent_by | 메시지 | sent_to date_sent | ip | convers_id | reply_id는 shout_out_reply의 FK이며 primary는 shout_out의 convers_id입니다. 어떻게 그 둘을 구별 할 수 있습니까? – Cjueden

+0

... 내가 제공 한 문에 정의 된 별칭을 사용합니다. 그러나 그들은 같은 가치가 아닌가? 그렇지 않다면 이렇게 할 수 있습니다 :'SELECT so.convers_id as so_con, sor.convers_id as sor_con FROM ...'... 아니면 내가 당신을 오해하고 있습니까? –

+0

필자는 이것이 쓰기 트랙에 있다고 생각하지만 OG 게시물과 같은 여러 개의 "주석"을 가져와 다음 OG 게시물로 시작하지만 많은 답글로 시작해야합니다. – Cjueden

0

구조를 마스트 설계하면 조인과 복잡한 쿼리를 쉽게 만들 수 있습니다. 무엇보다도 작품을 결합하는 방법과 사용해야 할 시점을 이해해야합니다. 이것을 확인 구글.

관련 문제