2011-12-15 134 views
2

你好我試圖查詢我的數據庫表「shout_out」,在while循環期間我有一個if語句來檢查「convers_id」列是否已從no_reply更改。如果有,我想另一個查詢運行並獲取shout_out_reply表中具有相同「convers_id」列的所有行。我試圖得到一個類似Facebook的「牆」佈局。有人發表評論,其他人可以回覆該評論,並在原評論下回復。在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

我沒有時間回答,但通常在循環中運行查詢是一個壞主意。 – 2011-12-15 21:44:56

+0

你是什麼意思失敗?沒有行返回? – Robert 2011-12-15 21:45:12

回答

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 JOIN語句。它會在一個聲明中給你兩個表的結果。 ...那麼你不必經過循環。製作所有這些sql請求。

0

你的桅杆設計表這樣的結構,這將很容易地創建連接和複雜querys。首先,你需要了解作品如何加入以及何時必須使用。檢查谷歌這一點。