I have a basic key-value table, that has some data in it for each user. With the updated mysql it has the sql_mode set to only_full_group_by (new d
This is a common error for MySQL users. In MySQL 5.7, by default the database enforces the standard semantics that most other SQL databases have been enforcing for years.
The rule is that every column in your select-list must be one of:
In your query (I'll expand your SELECT *):
select user_id, feature_key, feature_value from user_features
where user_id = 1
group by feature_key
You are grouping by feature_key, but this means the other columns don't comply with the rules I described above.
Here's a way to fix it:
select MAX(user_id), feature_key, GROUP_CONCAT(feature_value)
from user_features
where user_id = 1
group by feature_key
It might seem redundant to use MAX(user_id) since there is only one value possible based on the WHERE clause condition. But there's no harm either. MIN(user_id) would also work.
See also my past answers on this same error: