GROUP列的混合(MIN()、MAX()、COUNT()、..)如果没有GROUP BY子句,则不包含GROUP列是非



我使用的是一个旧的php脚本,这个查询有一个错误。由于我对mysql没有经验,我无法修复它。

"SELECT COUNT(p.postid) AS pid, p.*, t.* FROM ".TABLE_PREFIX."post AS p 
INNER JOIN ".TABLE_PREFIX."thread AS t ON (p.threadid = t.threadid) WHERE
p.username='".$uname."'" 

错误是

GROUP列的混合(MIN()、MAX()、COUNT()…)如果没有GROUP BY子句,则不包含GROUP列是非法的

我希望有人能帮我

正如错误所说,如果不显式(使用GROUP BY)或隐式(仅通过选择聚合)对行进行分组,就无法选择聚合函数,如COUNT。用不太专业的术语来说,你告诉数据库,"用这个用户名查找所有帖子,它们所属的线程,以及帖子的数量",而数据库回答你,"什么帖子的数量?"。

所以你需要更具体一些。如果你真正想要的是:

  • 如果您实际上并不关心所有单独的帖子,而只想要线程和该用户每个线程的帖子数量,请从SELECT中删除p.*,并将GROUP BY t.threadid添加到查询的末尾
  • 如果您想要帖子的总数以及所有帖子和线程,只需计算结果行即可
  • 如果您想要所选线程中所有用户的帖子总数,这将使查询更加复杂,因为您需要再次加入post才能获得帖子总数
  • 如果您实际上根本不想要计数,请将其从查询中删除。:)

最新更新