2016-09-07 21 views
0

So habe ich eine Tabelle, ThemenPulling Forum-Threads in der Reihenfolge des letzten Beitrags

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

Und eine zweite Tabelle, Beiträge

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 

(Timestamp in Beiträgen die zehn sind -digit zweite ganzzahlige Darstellung der Zeit, die die PHP-Funktion time() ausgibt, wenn der angegebene Benutzer seinen Kommentar an die db sendet.) Wenn es darum geht, alle Forum-Thread-Themen auf der f Auf der Übersichtsseite von orum möchte ich alle Threads in der Reihenfolge anzeigen, in der der letzte Kommentar gepostet wurde. Ich habe meine eigenen Hände bei verschachtelten MySQL-Abfragen ausprobiert (hat nicht funktioniert), also habe ich angefangen, etwas zu recherchieren. Nichts anderes, was ich fand, war in der Lage, mir zu vermitteln, wonach ich suchte. Ich fühle mich wie this kam nahe, aber ich habe immer noch alle Ergebnisse von einzigartigen ThreadNumbers gegeben. Im Idealfall, was ich zurück bekommen würde, ist so etwas wie:

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

Dank einer Tonne für diese und jede mögliche [und dringend benötigte] Lesen helfen!

Ich habe

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

, die nicht nur nicht zurückgeschickt haben, was eigentlich wollte ich, aber funktionierte nicht so, wie ich sowieso gedacht.

+0

Können Sie Ihre Frage mit der Abfrage, die Sie bisher versucht haben, aktualisieren? – Maximus2012

+0

Fügen Sie der Tabelle 'threads' ein Feld' last_post_id' hinzu. – zerkms

+0

@ Maximus2012 Hinzugefügt. –

Antwort

0

Sie können, dass in einem Antrag zu tun mit gutem Beispiel folgenden

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; 

Mit Quelldaten wie

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) 

und

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) 

ausgeben werden Sie folgende

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) 

Aber in Ihrem Fall werde ich die Datenbankstruktur neu entwickeln. Sie haben einige sehr schlechte Probleme in Ihrer Struktur. Zumindest können Sie ID-Feld in Posts hinzufügen. Momentan können Sie keinen gültigen Index darin setzen und Ihre Anfragen werden mit großen Daten langsamer.

+0

Warum brauchen Sie 'distinct' hier? – zerkms

+0

Ja, eigentlich hat es hier keinen Sinn. – Spell

Verwandte Themen