我有一个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
或将时间存储为DATETIME
和ORDER 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>";
}