【问题标题】:MySQL GROUP BY is not working in PDO prepared statement [duplicate]MySQL GROUP BY 在 PDO 准备好的语句中不起作用 [重复]
【发布时间】:2021-06-24 07:40:33
【问题描述】:

我有两个语句:一个是用 mysql_query 写的,另一个是用 PDO 写的:

mysql_query:

$sql = $mysql_query("SELECT `user_report`.* FROM `user_report` LEFT JOIN `user` ON 
`user_report`.`user_id` = `user`.`user_id` WHERE `user`.`userBlocked` = 0 GROUP BY 
`user_id` ORDER BY `reports` DESC, `user_report`.`timestamp` ASC");

准备好 PDO:

$sql = $pdo->prepare("SELECT `user_report`.* FROM `user_report` LEFT JOIN `user` ON 
`user_report`.`user_id` = `user`.`user_id` WHERE `user`.`userBlocked` = 0 GROUP BY 
`user_id` ORDER BY `reports` DESC, `user_report`.`timestamp` ASC");

$sql->execute();

PDO 不适用于GROUP BY user_id

我需要它的原因是如果两个结果具有相同的user_id,我想将其显示为一个。

PDO 怎么可能不允许 GROUP BY 函数...在 MySQL 语句中是否有替代方法?

谢谢。

【问题讨论】:

  • Your group by usage is invalid SELECT * ... GROUP BY column is in general a bad query.. 提供它不起作用的错误消息不是错误消息,此外还提供示例数据和预期结果跨度>
  • 它可能根本不是 PDO.. 它可能是 MySQL 模式 ONLY_FULL_GROUP_BY。您是否尝试在您的 php 连接到的同一台服务器上运行查询?
  • 嗯......我很困惑......实际上每次都有效的 BAD QUERY 的定义是什么,因为我之前在很多场合都使用过它
  • GROUP BY 用于将查询结果分成组,然后您可以在其中应用聚合函数(minmax 等)。在您的查询中,您没有任何聚合函数,因此使用 GROUP BY 没有意义。早期版本的 MySQL 默认允许错误使用 GROUP BY,但较新的版本(从 5.7.5 开始)默认会产生错误。您想通过GROUP BY 实现什么目标?
  • 看起来您可能禁用了 PDO 错误报告。阅读stackoverflow.com/questions/32648371/…

标签: php mysql pdo


【解决方案1】:

试试这个

$sql = $pdo->prepare("SELECT user_report.* FROM `user_report` LEFT JOIN `user` ON 
user_report.user_id = user.user_id WHERE user.userBlocked = 0 GROUP BY 
user.user_id DESC, user_report.timestamp ASC");
$sql->execute();

我所做的更改``删除选择表和 GROUP BY 是指向哪个可以是(user.user_id 或 user_report.user_id)你需要确认? AND ORDER BY(报告)指向 ?所以我删除了?

你尝试上面的sql,如果有任何错误,请提供你的输出。

【讨论】:

  • 这行得通:$sql = $pdo->prepare("SELECT user_id FROM user_report GROUP BY user_id"); 但现在我对使用``标记感到困惑
  • `` 由 phpmyadmin 提供的标记或手动标记大多不适用于 JOIN :) 我之前尝试过它没有用。如果这有帮助,请点赞。
猜你喜欢
  • 2015-09-19
  • 2018-01-24
  • 1970-01-01
  • 1970-01-01
  • 2013-06-25
  • 2011-11-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多