不太确定我缺少什么,但是我的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),而是仅返回一个主题。

最佳答案

通常,您在那里需要一个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


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

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

10-08 15:44