2011-12-15 137 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。首先,你需要了解作品如何加入以及何时必须使用。检查谷歌这一点。