【问题标题】:Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause如果没有 GROUP BY 子句,则混合没有 GROUP 列的 GROUP 列 (MIN(),MAX(),COUNT(),...) 是非法的
【发布时间】:2012-03-03 16:44:15
【问题描述】:

我使用的是旧的 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 列的 GROUP 列 (MIN(),MAX(),COUNT(),...) 是非法的

希望有人能帮助我

【问题讨论】:

  • 我在你的 sql "SELECT COUNT(p.postid) AS pid, p.*, t.* FROM post AS p INNER JOIN thread AS t ON (p.threadid = t.threadid) WHERE p.username='kamal'" 我在 Windows 上使用 xampp...我的 MySQL 客户端版本:5.0.51a ....您使用的是什么版本...
  • @Kamal:那是MYSQL error 1140,即使对于 MySQL 5.6,它仍然被记录在案。但你是对的,I can't seem to find any way to reproduce it。 (尽管请注意,该查询可能不会返回人们期望它返回的内容。)

标签: php mysql


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2017-01-11
    • 1970-01-01
    • 2020-04-02
    • 2014-09-09
    • 2019-02-11
    • 2016-01-10
    • 1970-01-01
    • 1970-01-01
    • 2020-07-05
    相关资源
    最近更新 更多