1

今のところ、これを使用してフォーラム内のすべてのスレッドを並べ替えます。

SELECT * FROM board ORDER BY id DESC LIMIT 50

これは、一番上に作成された最新のスレッドを示していますが、最新の応答があるスレッドを表示するだけでなく、一番上に新しいスレッドを表示するにはどうすればよいですか?

例:

  1. これは新しいスレッドです
  2. これは古いスレッドです
  3. これは古いスレッドです

に:

  1. これは新しい返信のある古いスレッドです
  2. これは返信のない新しいスレッドです
  3. これは古いスレッドです

それが助けになるなら、これは返信コードです:

$sql="INSERT INTO reply (id, name, subject, maintext, ip, date, img)

VALUES

('$idid','$name','$subject','$maintext','$encoded','$date','$image_name')";

if (!mysql_query($sql,$con))

  {

  die('Error: ' . mysql_error());

  }

mysql_query("UPDATE board SET replycount = replycount + 1 WHERE id = $idid");
4

1 に答える 1

2

私があなたの質問を理解しているなら、あなたは最近の返信と最新のスレッドの両方でソートしたいと思います。テーブルに関する詳細情報がないと正確な構文を提供することはできませんが、クエリは次のようになります。

SELECT *
FROM board
ORDER BY GREATEST(replyDateTime, creationDateTime)
LIMIT 50;

これは、GREATEST関数を使用して、各行をreplyDateTime、またはcreationDateTime...のいずれか新しい方で並べ替えます。

編集:

別のテーブルに返信情報を入力すると、クエリで左結合を使用して、ボード内の各投稿の最新の返信を選択できます...次にGREATEST、投稿の作成日または最新の返信のいずれかを選択するために使用できますポストの。

/* You will need to specify all your columns in board instead of using * */
SELECT b.ID, b.CreationTimeStamp, MAX(r.CreationTimestamp)
FROM 
    board b
    LEFT JOIN replies r ON r.BoardID = b.ID
/* Include all your columns in your select from board here in your group by */
GROUP BY b.ID, b.CreationTimeStamp
ORDER BY GREATEST(b.CreationTimestamp, MAX(r.CreationTimestamp))
LIMIT 50;
于 2012-05-17T23:01:26.540 に答える