2016-09-07 25 views
0

のために、フォーラムのスレッドを引っ張るとだから、私は1つのテーブルを持っている、スレッド最新の投稿

ThreadNumber | Sticky | Title 
1   | 1  | Read This Before Posting! 
2   | 0  | Second Topic 
3   | 0  | Check This  

そして第二に、テーブル、投稿

ThreadNumber | Author | Timestamp | Body      | PostNumber 
1   | User1 | 1   | Read up!     | 0 
1   | User2 | 2   | I see.      | 1 
2   | User2 | 3   | So tell me what'chu want! | 0 
3   | User3 | 5   | Yeah, check this out.  | 0 
2   | User3 | 7   | What'chu really really want!| 1 
2   | User1 | 10  | I'll tell you what I want! | 2 

(投稿のタイムスタンプが10でありますPHPのtime()関数が与えられたユーザが自分のコメントをデータベースに提出したときに与えられる時間の第2の整数表現。)したがって、フォーラムスレッドのすべてのトピックをfオウム概要ページでは、最後のコメントが投稿された順にすべてのスレッドが表示されます。私はネストされたMySQLのクエリで自分の手を試しましたが(うまく行かなかったので)、私はいくつかの研究をしようとし始めました。私が見つけたものは、私が探していたものを私に手に入れることはできませんでした。私はthisが近づいたように感じるが、私はまだユニークなThreadNumbersによって与えられたすべての結果を得た。理想的には、私が返さなるだろうことのようなものです:

ThreadNumber | Title      | LastTimestamp 
2   | Second Topic    | 10 
3   | Check This    | 5 
1   | Read This Before Posting! | 1 

これと任意の可能性[し、必要なくらい]を読んでくれてありがとうトンを助けて!

私は私が実際に何を望むか戻っていないだろうが、私はとにかく意図ように動作しませんでしただけでなく、

SELECT PostNumber, ThreadNumber, Body, Author, Timestamp 
FROM (SELECT PostNumber, ThreadNumber, Body, Author, Timestamp 
     FROM Posts 
     ORDER BY Timestamp DESC) AS p 
GROUP BY ThreadNumber; 

を試してみました。

+0

これまでに試した質問で質問を更新できますか? – Maximus2012

+0

'last_post_id'フィールドを' threads'テーブルに追加します。 – zerkms

+0

@ Maximus2012追加されました。 –

答えて

0

あなたは以下の

mysql> select * from Posts; 
+--------------+--------+-----------+------+------------+ 
| ThreadNumber | Author | Timestamp | Body | PostNumber | 
+--------------+--------+-----------+------+------------+ 
|   1 | User1 |  20 |  |   0 | 
|   2 | User1 |  30 |  |   0 | 
|   3 | User1 |  10 |  |   0 | 
|   1 | User1 |  24 |  |   0 | 
|   2 | User1 |   2 |  |   0 | 
|   3 | User1 |  200 |  |   0 | 
+--------------+--------+-----------+------+------------+ 
6 rows in set (0,00 sec) 

mysql> select * from Threads; 
+--------------+--------+----------+ 
| ThreadNumber | Sticky | Title | 
+--------------+--------+----------+ 
|   1 |  0 | Thread 1 | 
|   2 |  0 | Thread 2 | 
|   3 |  0 | Thread 3 | 
+--------------+--------+----------+ 
3 rows in set (0,00 sec) 

意志の出力のような例に、ソース・データで

select 
    Posts.ThreadNumber, 
    Title, 
    max(Timestamp) 
from Threads 
left join Posts on Threads.ThreadNumber = Posts.ThreadNumber 
group by Posts.ThreadNumber, Title 
order by max(timestamp) desc; 

に従うことによって、一つのリクエストでそれを行うことができます

mysql> select distinct Posts.ThreadNumber, Title, max(Timestamp) from Threads left join Posts on Threads.ThreadNumber = Posts.ThreadNumber group by Posts.ThreadNumber, Title order by max(timestamp) desc; 
+--------------+----------+----------------+ 
| ThreadNumber | Title | max(Timestamp) | 
+--------------+----------+----------------+ 
|   3 | Thread 3 |   200 | 
|   2 | Thread 2 |    30 | 
|   1 | Thread 1 |    24 | 
+--------------+----------+----------------+ 
3 rows in set (0,00 sec) 

あなたの場合、私はデータベース構造を再開発します。あなたの構造には非常に悪い問題がいくつかあります。少なくとも投稿にIDフィールドを追加することができます。今のところ、あなたはそれに有効なインデックスを設定することはできませんし、あなたの要求は大きなデータでは遅くなります。

+0

ここで「別名」が必要なのはなぜですか? – zerkms

+0

ええ、実際それはここでは意味がありません。 – Spell

関連する問題