PHP:添加GROUP BY时出现错误尝试获取非对象的属性

时间:2016-12-28 23:20:21

标签: php mysql database mysqli

你好我的代码工作完美但是当我添加GROUP BY时我得到错误,感谢提前:

$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

代码:

$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

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;

1 个答案:

答案 0 :(得分:3)

mysqli在失败时返回false。这意味着您的分组查询失败。这反过来暗示您正在使用mysql 5.7

  

MySQL 5.7.5及更高版本实现了对功能依赖的检测。如果   启用ONLY_FULL_GROUP_BY SQL模式(默认情况下是这样),   MySQL拒绝选择列表,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所指出的那样。

唯一真正的解决方案是让您更改查询。例如,以下内容将起作用。

SELECT sent_by FROM `chat` WHERE `sent_to` = '1' GROUP BY `sent_by`

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

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