PHP while循环-排除最近的行


PHP while loop - exclude most recent row?

我有一个PHP while循环加载用户评论-我需要排除数据库中最近的行。

$sql = "SELECT c.trackid, c.comment, c.time, c.userid, u.id, u.username FROM 
comments c
LEFT JOIN users u
ON u.id = c.userid
WHERE trackid='$trackid'
ORDER BY c.time DESC";

$i=1;
while ($row = mysql_fetch_assoc($result)) {
  echo "<div class='"commentDivs'">" . $row['time'] ."<br><br> " . $row['username'] . "<div class='"userPostedComments'">" . $row['comment'] . "</div></div>";
}

如何从循环中排除最近的行?

你可以这样做,你将不得不运行2查询首先找到最新评论的id ....

$sql = mysql_query("SELECT id FROM tbl_name ORDER BY id DESC");
$row = mysql_fetch_array($sql);
$latest_id = $row['id'];

这将给你最新的id,然后你可以像这样运行下一个查询

$sql1 = mysql_query("SELECT * FROM tbl_name WHERE id != '$latest_id' ORDER BY id DESC");
 while($row1 = mysql_fetch_array($sql1))
 {    }

,让我们知道你想做什么,可能会使你的代码更干净

如果您的查询返回按最近降序排序的结果,您可以在查询端指定OFFSET 1

或者,您可以使用mysql_data_seek来移动行指针,无论您需要。

SELECT c.trackid, c.comment, c.time, c.userid, u.id, u.username FROM 
comments c
LEFT JOIN users u
ON u.id = c.userid
WHERE trackid='$trackid'
AND c.time != ( SELECT max(c.time) FROM comments WHERE u.id = c.userid )
ORDER BY c.time DESC

请提供数据库结构和sql查询以便我们帮助,您可以在sql查询中使用ORDER BY id或将时间存储为DATETIMEORDER BY time

你可以用

$rows = array();
while ($row = mysql_fetch_array($result))
{
    $rows[] = $row;
}

那么你可以很容易地使用$rows作为数组,并且可以执行for循环,直到count($rows)-1

for($i = 0; $i < count($rows) - 1 ; $i++)
{
    print '<div class="commentDivs">' . $rows[$i]['time'] .'<br><br> ' . $rows[$i]['username'] . '<div class="userPostedComments">' . $rows[$i]['comment'] . '</div></div>';
}

编辑:或者你可以跳过特定的行,如果你没有订购他们的时间…

或者如果你让它order DESC那么你只需修改我的loop-header为

for($i = 1; $i < count($rows) ; $i++)

下面是一个简单的解决方案,使用您当前的查询:

for($i=1; $i < mysql_num_rows($result); $i++) {
    mysql_data_seek($result, $i);
    $row = mysql_fetch_assoc($result);
    echo "<div class='"commentDivs'">" . $row['time'] ."<br><br> " . $row['username'] . "<div class='"userPostedComments'">" . $row['comment'] . "</div></div>";
}