你好,我的代码运行得很好,但是当我添加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;发布于 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。
唯一真正的解决方案是让你改变你的查询。例如,下面的代码将会起作用。
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 = 1https://stackoverflow.com/questions/41371073
复制相似问题