2011-01-08 7 views
0

私は行方不明だが、私のSQLステートメントは1行を返すだけです。SQL結合のみ1行を返します

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 

私は2つのテーブル(post_listとtopic_list)、およびtopic_listのtopic_idにpost_listのpost_parentリンクを持っています。

すべてのトピック(そのボードのtopic_board_linkがnの場合)を返す代わりに、1つのトピックのみを返します。

+0

PK/FK定義を含む、CREATE TABLEの関連部分をポストします。 – Ronnis

+0

post_listのPKはpost_idであり、topic_listのPKはtopic_idである。私はFKを持っていない(私は思う)。 –

答えて

2

通常、そこにはGROUP BY句が必要です。 MySQLは、GROUP BYが必要なときに、標準SQLとは異なるルールを持っています。従って、これは、標準SQLに近い:標準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 

、あなたがtopic_listですべての列をリストしなければならない、プラス非集計値がtopic_rating(とあなたが表現ではなく、表示ラベルをリストする必要がある場合がありますまたは選択リストの列エイリアス)。

また、結果セットを1つのグループに限定している可能性のある「topic_board_link」の制約条件もあります。通常、ORDER BY句にはプレースホルダも使用できません。

+0

おかげさまで、GROUP BYはその日を保存しました。私はおそらくSQLの本をもう一度拾うべきです;) –

関連する問題