2011-01-08 23 views
0

Nicht ganz sicher, was ich vermisse, aber meine SQL-Anweisung gibt nur eine Zeile zurück.SQL Join nur 1 Zeile zurückgeben

SELECT 
    tl.*, 
    (tl.topic_total_rating/tl.topic_rates) as topic_rating, 
    COUNT(pl.post_id) - 1 as reply_count, 
    MIN(pl.post_time) AS topic_time, 
    MAX(pl.post_time) AS topic_bump 
    FROM topic_list tl 
    JOIN post_list pl 
     ON tl.topic_id=pl.post_parent 
    WHERE 
     tl.topic_board_link = %i 
     AND topic_hidden != 1 
    ORDER BY %s 

Ich habe zwei Tabellen (post_list und topic_list) und post_parent Links der post_list zu einem topic_id der topic_list.

Anstatt alle Themen zurückzugeben (wo der topic_board_link ihres Boards n ist), wird nur ein Thema zurückgegeben.

+0

relevante Teile von CREATE TABLE, einschließlich PK/FK-Definitionen. – Ronnis

+0

PK von post_list ist post_id, PK von topic_list ist topic_id. Ich habe keine FKs (glaube ich). –

Antwort

2

Normalerweise benötigen Sie dort eine GROUP BY-Klausel. MySQL hat andere Regeln als Standard SQL zum Thema, wenn GROUP BY benötigt wird. Dies ist deshalb näher an Standard-SQL:

SELECT tl.*, 
     (tl.topic_total_rating/tl.topic_rates) AS topic_rating, 
     COUNT(pl.post_id) - 1 AS reply_count, 
     MIN(pl.post_time) AS topic_time, 
     MAX(pl.post_time) AS topic_bump 
    FROM topic_list AS tl 
    JOIN post_list AS pl ON tl.topic_id = pl.post_parent 
WHERE tl.topic_board_link = ? -- %i 
    AND tl.topic_hidden != 1 
GROUP BY tl.col1, ..., topic_rating 
ORDER BY ? -- %s 

Im Standard-SQL, würden Sie jede Spalte in topic_list, sowie die Nicht-Gesamtwert topic_rating Liste müssen (und man könnte den Ausdruck anstatt der Anzeigeetikettenliste müssen oder Spaltenalias in der Auswahlliste).

Sie haben auch eine Einschränkungsbedingung für 'topic_board_link', die Ihre Ergebnismenge auf eine Gruppe beschränken könnte. Sie können normalerweise keinen Platzhalter in der ORDER BY-Klausel verwenden.

+0

Danke, die GROUP BY hat den Tag gerettet. Ich sollte wahrscheinlich wieder ein Buch über SQL aufnehmen;) –

Verwandte Themen