SQL Join仅返回1行

时间:2011-01-08 23:45:14

标签: mysql join

我不太确定我缺少什么,但我的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 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

我有两个表(post_list和topic_list),以及post_list的post_parent指向topic_list的topic_id的链接。

它不会返回所有主题(其主板的topic_board_link为n),而只返回一个主题。

1 个答案:

答案 0 :(得分:2)

你通常需要一个GROUP BY子句。在需要GROUP BY时,MySQL与标准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

在标准SQL中,您必须列出topic_list中的每一列,以及非聚合值topic_rating(您可能必须列出表达式而不是选择列表中的显示标签或列别名)。

您还可以在'topic_board_link'上设置限制条件,这可能会将您的结果集限制为一个组。您通常也不能在ORDER BY子句中使用占位符。