2011-09-25 1 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

あなたはこのようにそれを行うことができますORDER BY idを使用するか、SQLクエリでDATETIMEORDER BY timeとして時間を格納できるデータベース構造やSQLクエリを提供してください最新コメントの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)) 
{ } 
のように、次のクエリを実行することができます

とあなたは、あなたが簡単に配列として$行を使用することができます

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

ようなものを使用することができることは、あなたのコードをよりきれいになりますがあります

+0

MySQLが全体のセットを処理するのを止めるために 'LIMIT 1'を追加したいかもしれません。また、 'id'に索引を作成していない場合は、その索引を主キーにする必要があります。 –

+0

@Core Xii yup yup ....それを忘れる – josh

1

クエリの結果が最も新しい降順でソートされている場合は、OFFSET 1を指定してクエリ側でこれを行うことができます。

代わりにmysql_data_seekを使用して、必要に応じて行ポインタを移動できます。

+0

あなたが読んだ最初の行を無視してください。 –

+0

@ Vilx-実際には、mysql_fetch_assoc($ result)を実行しても問題ありません。 〜のために。 –

0

ので、我々は助けることができる、あなたは2を実行する必要があります

0

、私たちはあなたがやろうとして聞かせて、 EDIT

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>'; 
} 

よう

-1のカウント($行)まで、forループでステップ実行することができます:またはあなたがspecifの上にジャンプすることができますICのラインは、あなたが...時間によって

それらをordertないHAV場合や、持っている場合、それはここで

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

に私のループヘッダを変更する時間yustでDESCをordert、簡単な解決策使用していますあなたの現在のクエリ:

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 
関連する問題