你好我的代码工作完美但是当我添加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;
答案 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