如果没有GROUP BY子句,混合GROUP列(MIN(),MAX(),COUNT(),...)没有GROUP列是非法的

时间:2012-03-03 16:44:15

标签: php mysql

我正在使用旧的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 BY子句,混合GROUP列(MIN(),MAX(),COUNT(),...)没有GROUP列是非法的

我希望有人可以帮助我

1 个答案:

答案 0 :(得分:1)

与错误一样,您不能选择聚合函数(如COUNT),也不能显式(使用GROUP BY)或隐式(仅通过选择聚合)对行进行分组。用不太技术性的术语表示 - 你告诉数据库,“按这个用户名查找所有帖子,他们所属的线程,帖子数量”,数据库正在回答你,“帖子数量在什么?“。

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

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