我正在使用
mysqli_query($con, "SELECT * FROM chat GROUP BY sender");
根据下表,我应该得到 1 行,其中我只有一个发件人,如果我是“b”,则总共有 3 行消息
table 上聊天
sender destination message
| a | | b | | .. |
| b | | a | | .. |
| a | | b | | |
| a | | b | | |
| b | | a | | |
我收到此错误消息
ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'chat.chat.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
最佳答案
GROUP BY
并不否认在 SELECT
子句中使用通配符 (*
) 的能力,也不要求 GROUP BY
列包含在 SELECT
子句中。
这使得mkysoft的断言:
You need to use grouped column in select.
完全错误,并且对读者不负责任/严重误导。
我将使用以下表结构和数据演示一些简单的查询:
CREATE TABLE `chat` ( `sender` varchar(10) NOT NULL, `destination` varchar(10) NOT NULL, `message` varchar(255) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1; INSERT INTO `chat` (`sender`, `destination`, `message`) VALUES ('a', 'b', 'm1'), ('b', 'a', 'm2'), ('a', 'b', 'm3'), ('a', 'b', 'm4'), ('b', 'a', 'm5');
使用此查询获取具有唯一 sender
-destination
对的所有行中的所有列:
SELECT * FROM `chat` GROUP BY `sender`,`destination`
输出将是:
sender destination message
a b m1
b a m2
<小时/>
使用此查询从具有唯一senders
的行中获取destination
列:
SELECT `destination` FROM `chat` GROUP BY `sender`
输出将是:
destination
b
a
<小时/>
使用此查询获取所有行中的所有列:
SELECT * FROM `chat`
输出将是:
sender destination message
a b m1
b a m2
a b m3
a b m4
b a m5
<小时/>
使用此查询从所有行获取所有三列,将所有列按升序排列,从 sender
开始,然后 destination
,然后 message
:
SELECT `sender`,`destination`,`message` FROM `chat` ORDER BY `sender`,`destination`,`message`
输出将是:
sender destination message
a b m1
a b m3
a b m4
b a m2
b a m5
<小时/>
使用此查询将分组值附加到单个字符串中,并以换行符作为“粘合剂”:
SELECT `sender`,`destination`,GROUP_CONCAT(`message` SEPARATOR '\n') AS `all_mess` FROM `chat` GROUP BY `sender`,`destination`
输出将是:
sender destination all_mess
a b m1
m3
m4
b a m2
m5
您可以在 GROUP_CONCAT() 中选择您喜欢的任何分隔符功能。
包裹所有列名和别名的反引号是可选的。
您可以决定如何处理和显示结果集。
根据问题中的错误陈述,您似乎正在引用数据库:chat
,表:chat
,列:id
其中未包含在 SELECT * FROM chat GROUP BY sender
的 sql 字符串中或问题中的任何位置 - 由于这种不一致,我无法提供帮助。
如果有人想使用此示例表尝试一些查询,您可以使用此 SQLFiddle Demo .
希望这可以消除您和 SO 读者的任何困惑。
关于MySQL select group by 子句不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39740460/