2011-06-08 122 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]; 
}