2011-06-08 106 views
1
$sql = "SELECT messages.text, users.name FROM messages INNER JOIN users ON messages.user_id=users.id ORDER BY messages.ms_id DESC LIMIT 10"; 
$result = mysql_query($sql); 
$rows = array(); 
    while($row = mysql_fetch_array($result)) 
    { 
      $rows[]=$row; 
    } 
    echo $rows[0][1].$rows[0][0]; 
/*   for($i=0;$i<=10;$i++) 
       { 

            echo $rows[i][1].$rows[i][0]; 

       } 
*/ 

此腳本應顯示聊天中的最後10條消息。我在做的是從用戶表中獲取用戶的名稱以及來自消息的文本表和我想要顯示他們在我的聊天窗口。現在我只有4條消息記錄,不知道這是如何影響整個腳本我也應該實施檢查,但更大的問題是,當我使用echo $rows[0][1].$rows[0][0];信息顯示正確,但當我試圖做一個循環,所以我可以顯示最後10(我嘗試了評論之一)然後沒有顯示。我想至少當我使用這個循環,我會看到4錄製的消息但真正發生的是一個空白窗口。很明顯,我有記錄在$ rows []中的信息並且可以回顯它,但不明白爲什麼這個循環是d on't工作在一切。我會很感激,如果有人可以幫助我,並與檢查消息是否少於10。顯示MySQL後的JOIN查詢結果

謝謝。

Leron P.S 下面是編輯的腳本,感謝所有的你,我需要因爲顯示在頂部,否則將最新的消息是不是opiton當我使用它diplaying聊天masseges數組。

for($i=10;$i>=0;$i--) 
      { 
         if($rows[$i][1]!="" || $rows[$i][0]!="") 
          { 
           echo $rows[$i][1].' : '.$rows[$i][0]; 
           echo "</br>"; 
          } 
      } 

回答

2

你的for循環運行11次,即使只有10條記錄。第二個條款應該是<而不是<=。加上$在i變量上丟失。

例如起見,你並不真的需要從行做一個數組,你可以通過名字來描述字段:

while($row = mysql_fetch_array($result)) 
{ 
    echo $row['name'] . ' says: ' . $row['message'] . '<BR>'; 
} 
1

爲什麼不只是做

while($row = mysql_fetch_array($result)) 
    { 
      echo $row[1]." ".$row[0]; 
    } 

您的查詢,自動限制它到最後10,這將然後顯示從0到10,得到返回任何東西。

PS我添加的用戶名和消息之間的空間,可讀性

1

您需要$你的我的變量符號:

for($i=0;$i<10;$i++) 
{ 
    echo $rows[$i][1].$rows[$i][0]; 
} 

更健壯的解決辦法是這樣的:

$sql = "SELECT messages.text, users.name FROM messages INNER JOIN users ON messages.user_id=users.id ORDER BY messages.ms_id DESC LIMIT 10"; 
$result = mysql_query($sql); 

while($row = mysql_fetch_array($result)) 
{ 
    echo $row[1].$row[0]; 
}