2010-11-09 45 views
0

我正在研究php/mySQL/ajax留言框,并遇到了一个小问题。 在页面上,我希望将内容从最旧加载到最新,最新加载到最下面。一旦数据库开始获取大量数据,我也想限制输出以减少加载时间。php,mySQL返回前一个x行

这是当前的代码;

<?php 

include_once("../includes/db.php"); 
include_once("../includes/functions.php"); 

$q="SELECT tM.*, tC.char_name as username, tC.char_id as char_id 
FROM shoutbox tM JOIN characters tC 
ON tC.char_id=tM.char_id 
ORDER BY shout_id DESC LIMIT 25"; 

db_Connect(); 

$result=mysql_query($q); 

while($row=mysql_fetch_array($result)) 
{ 
    $classColor = getClassColor($row['char_id']); 
    echo "<span class='".$classColor."'>".$row['username']."</span>: ",nl2br($row['shout_message'])."<br />"; 
} 

mysql_Close(); 

?> 

我已经使用while($row=array_reverse(mysql_fetch_array($result)))以及$result = array_reverse(mysql_query($q))尝试,但都返回array_reverse需要被馈送阵列的错误。

到目前为止,我在网上从SQL方面发现的任何东西都已经被回答“只是相应地使用DESC或ASC”。

回答

1
$res = mysql_query($q); 
$shouts = array(); 

while($row = mysql_fetch_assoc($res)) 
    $shouts[] = $row; 
$shouts = array_reverse($shouts); 

foreach($shouts as $shout) { 
    // show them... 
} 
+0

太棒了!谢谢。 *把这些技巧放在一起 – Jesse 2010-11-09 23:45:15

1
$result=mysql_query($q); 

unset($temp_array); 

while($row = mysql_fetch_array($result)) 
    $temp_array []= $row; 

$temp_array = array_reverse($temp_array); 

foreach ($temp_array as $row) 
{ 
    $classColor = getClassColor($row['char_id']); 
    echo "<span class='".$classColor."'>".$row['username']."</span>: ",nl2br($row['shout_message'])."<br />"; 
} 
+0

你完全确定'$ temp_array [] = ...'吗?上次我检查时,我相信这会创建一个'false'元素作为数组的最后一个元素,因为上次调用它时,mysql_fetch_array返回'false'。 – MartinodF 2010-11-09 23:22:02

+0

是的,你是对的。我编辑了我的文章,并向你保证。 – AndreKR 2010-11-09 23:30:06

+0

由于您有耐心投入“显示”部分,因此我向上投票;) – MartinodF 2010-11-10 00:18:27

1

如果你想从旧到新,并shout_id是自动增量只是使用

ORDER BY shout_id ASC LIMIT 25 

你有DESC/ASC混合起来

+0

ASC LIMIT 25将返回前25个,所以任何人在第25个之后发帖永远不会显示(这是我如何发现问题的第一,抓我的脑袋,想知道为什么当我切换到另一个用户时,新的帖子停止显示)DESC LIMIT 25将返回最后一个,但是顺序错误,因为它在选择结果之前有效地反转了整个表的顺序。我已经尝试过两种方法,都没有成功,所以我在这里问了一个问题。 – Jesse 2010-11-09 23:37:37

0

似乎是一个点燃的工作。我只是用这个:

$result = mysql_query($strQuery) or die(mysql_error()); 

while ($row = array_reverse(mysql_fetch_array($result))) { 

$row['something']; 

}