2011-09-25 57 views
0

我有一個PHP while循環加載用戶評論 - 我需要排除數據庫中最近的行。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

什麼是你的SQL查詢? –

+1

...你的問題是什麼? – evilone

回答

1

你能做到這樣,你就要跑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)) 
{ } 
下一個查詢

,並讓我們知道你想做什麼,可能是會讓你的代碼更乾淨

+0

可能要添加'LIMIT 1'來阻止MySQL處理整個集合;如果你還沒有(在外觀上它應該是一個主鍵),也可以在'id'上創建一個索引。 –

+0

@Core Xii yup yup ....忘記了 – josh

1

如果您的查詢返回按最近的降序排序的結果,則可以通過指定OFFSET 1在查詢的一端執行此操作。

或者,您可以使用mysql_data_seek移動行指針,但需要。

+0

或者只是忽略你閱讀的第一行。 –

+0

@ Vilx-事實上,如果你做了'mysql_fetch_assoc($ result),它就可以工作得很好。爲......'。 –

0

請提供數據庫結構和SQL查詢,所以我們可以提供幫助,您可以使用ORDER BY id或存放時間DATETIMEORDER BY time在SQL查詢

0

你可以使用的東西作爲

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

,那麼你可以很容易地使用$行作爲一個數組,並可以在for循環步驟,直到計數($行)-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>'; 
} 

編輯:或者你可以跳過去的特異性IC系列,如果你甲肝不是由時間ordert他們...

,或者如果你有它ordert DESC的時候yust修改我的環頭

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

下面是一個簡單的解決方案,使用您當前查詢:

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>"; 
} 
1
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