首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP:当添加GROUP BY时,尝试获取非对象的属性时出错

PHP:当添加GROUP BY时,尝试获取非对象的属性时出错
EN

Stack Overflow用户
提问于 2016-12-29 07:20:21
回答 1查看 285关注 0票数 0

你好,我的代码运行得很好,但是当我添加GROUP BY时,我得到了错误,提前感谢:

代码语言:javascript
复制
$sql_query = $connection->query("SELECT * FROM `chat` WHERE `sent_to` = '1'");-Work perfect
$sql_query = $connection->query("SELECT * FROM `chat` WHERE `sent_to` = '1' GROUP BY `sent_by`");- Not Work
Notice: Trying to get property of non-object

代码:

代码语言:javascript
复制
$sql_query = $connection->query("SELECT * FROM `chat` WHERE `sent_to` = '1' GROUP BY `sent_by`");

if($sql_query->num_rows > 0) {
    while ($fetch_data = $sql_query->fetch_array(MYSQLI_ASSOC)) {
        echo $fetch_data["text"]. "</br>";
    }
}

表:HERE

代码语言:javascript
复制
CREATE TABLE IF NOT EXISTS `chat` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `sent_by` int(11) NOT NULL DEFAULT '0',
  `sent_to` int(11) NOT NULL DEFAULT '0',
  `user_id` int(11) NOT NULL DEFAULT '0',
  `text` text COLLATE utf8mb4_general_ci NOT NULL,
  `seen` enum('0', '1') NOT NULL DEFAULT '0',
  `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8 COLLATE = utf8_unicode_ci AUTO_INCREMENT = 1;
EN

回答 1

Stack Overflow用户

发布于 2016-12-29 07:27:03

mysqli在失败时返回false。这意味着group by查询失败。这又意味着您正在使用mysql 5.7

MySQL 5.7.5及更高版本实现了函数依赖检测。如果启用了ONLY_FULL_GROUP_BY SQL模式(缺省情况下已启用),MySQL将拒绝select列表、HAVING条件或ORDER by列表引用非聚合列的查询,这些列既未在GROUP BY子句中命名,也不依赖于这些列。( 5.7.5之前,MySQL不检测函数依赖,默认不开启ONLY_FULL_GROUP_BY。有关5.7.5之前版本行为的说明,请参阅《MySQL 5.6参考手册》。)

换句话说,您正在尝试的查询是无效的SQL。Mysql允许您在5.7之前执行这样的查询,但不再允许。但您仍然可以使用ANY_VALUE函数或禁用FULL_GROUP_BY来运行它。然而,正如Fred所指出的那样,这仍然会使您的查询成为无效的SQL。

唯一真正的解决方案是让你改变你的查询。例如,下面的代码将会起作用。

代码语言:javascript
复制
SELECT sent_by FROM `chat` WHERE `sent_to` = '1' GROUP BY `sent_by`

显然,您正在尝试获取文本列。因此,对于符合ANSI SQL的查询,您需要做一些工作

代码语言:javascript
复制
SELECT a.sent_by, a.`text` FROM chat a INNER JOIN (
    SELECT sent_by FROM `chat` WHERE `sent_to` = '1' GROUP BY `sent_by`) AS B ON a.sent_by = b.sent_by and a.sent_to = 1
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41371073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档