2010-12-20 5 views
0

Ich habe den ganzen Tag daran gearbeitet, und ich denke, dass mein Gehirn im Moment nicht richtig funktioniert.Verknüpfen von 3 Abfragen zusammen

Ich habe 3 Tabellen alle "verbunden" zusammen:
Boards Tabelle hat:
- board_id
- board_name

Thema Tabelle hat:
- topic_id
- topic_board_link (Links zu einem board_id)

Beitrag Tabelle hat:
- post_time
- post_parent (Links zu Top ic)

Im Wesentlichen möchte ich, dass die Platine, das letzte Thema in der ausgewählten Platine und der letzte Beitrag in diesem Thread anzuzeigen. Bisher mit meinem halben Gehirn funktioniert, ich habe (nicht funktioniert, da max_topic nicht am Ende definiert ist, und es gibt nur 1 Zeile):

SELECT 
    b.board_name, 
    MAX(t.topic_id) as max_topic, 
    MAX(p.post_id) as max_post 
FROM board_list b 
    INNER JOIN (topic_list t, post_list p) 
    ON t.topic_board_link=b.board_id AND p.post_id=max_topic 

Gibt es eine Möglichkeit, die ich tun kann, dies ohne Verwendung von Tonnen von Unterabfragen?

Antwort

0

Fügen Sie last_topic_id zur Tabelle boards und last_post_id zur Tabelle topics hinzu.

In diesem Fall haben Sie einfache und wirklich schnelle Abfrage, die alles zurückgibt, was Sie wollen.

+0

Ich habe darüber nachgedacht, aber Themen und Beiträge tendieren dazu, ziemlich schnell gelöscht zu werden, und ich habe das Gefühl, dass etwas auf Dauer unweigerlich versauen wird. –

+0

@kevin: Löschen und Beibehalten dieser Referenz ist ** VIEL BILLIGER ** Aufgabe, als Auswählen mit Unterabfragen. Sie können sie automatisch mit Triggern verwalten. – zerkms

+0

Meh, okay. Ich werde das dann tun. Was genau meinst du mit Triggern? –