Disabling only_full_group_by
mode (which is ANSI SQL standard compliant) is not the right approach. You are getting this error because of usage of aggregation function Group_concat()
alongside regular columns like p.id
and p.question
in the Select
, with no mention of Group By
details.
Due to this aggregation function, you will get a single row (without Group By
). But MySQL has no means of identifying which p.id
and p.question
to return in that one row. Previous MySQL versions (< 5.7) used to be lenient about this (not ANSI standard compliant), but thankfully they have made the stricter mode as default behavior now.
You should really disambiguate your query by adding a Group By
clause involving p.id
and p.question
.
Try the following:
SELECT p.id, p.question,
GROUP_CONCAT(a.answer SEPARATOR ';') AS answers,
GROUP_CONCAT(a.id SEPARATOR ';') AS answers_id
FROM poll p
JOIN poll_answer a ON p.id = a.poll_id
WHERE p.status = 1 AND date_start <= NOW() AND date_end >= NOW()
GROUP BY p.id, p.question
Also, do check: SELECT list is not in GROUP BY clause and contains nonaggregated column .... incompatible with sql_mode=only_full_group_by