I have a pretty big query to pull out the information about reports from each country, and right now, the only way I can limit this is by putting Limit 10 or some number at the end, which will limit the countries. However, what I want to do is limit the group_concat to 10 results per country, which in my case would be somehow limiting 10 to each instance of the word group_concat.
My current query is:
SELECT country,
GROUP_CONCAT(docID),
GROUP_CONCAT(analyst),
GROUP_CONCAT(region),
GROUP_CONCAT(report),
GROUP_CONCAT(topic),
MAX((date)) AS date,
MAX((docID)) AS docID,
GROUP_CONCAT(date) AS dates,
GROUP_CONCAT(event) AS events,
GROUP_CONCAT(province) AS provinces
FROM reports GROUP BY country
ORDER BY date DESC, docID DESC
I have seen this question asked, and I haven’t seen any really good answers. I know the function is not built into MySQL, as you can only limit based on the characters. Has anybody solved this problem before?
Workaround
One options is to pad your values with
spaces#. So every item in group_concat is the same length.Lets suppose there are no items longer than 20 chars.
Then your query would be:
Just to recap:
Or write your own version of group_concat
You can use your own group_concat UDF.
There are a couple of examples floating around on the net.
E.g.: http://www.codeproject.com/KB/database/mygroupconcat.aspx?display=Mobile