Just running a test:
The table:
CREATE TABLE IF NOT EXISTS `gc` (
`ord` int(11) NOT NULL,
`group` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `gc` (`ord`, `gr`) VALUES
(1, 0), (2, 0), (1, 0), (2, 0), (11, 0), (12, 0), (3, 0), (5, 0),
(1, 1), (2, 1), (1, 1), (2, 1), (11, 1), (12, 1), (3, 1), (5, 1);
I ran SELECT GROUP_CONCAT(ord ORDER BY ord) FROM gc GROUP BY gr and the result isjust as you want it:
1,1,2,2,3,5,11,12
But if you use VARCHAR for the ord column, the result for the exact same query is
1,1,11,12,2,2,3,5
But The Query SELECT GROUP_CONCAT(ord ORDER BY CAST(ord AS SIGNED)) FROM gc GROUP BY gr returns again
1,1,2,2,3,5,11,12
I tested this with MySQL 5.6.11
UPDATE
You cannot change the ORDER BY clause in a GROUP_CONCAT with an IF, but you can change the whole GROUP_CONCAT for different groups by writing the IF in front of the GROUP_CONCAT
SELECT
gr,
IF(gr = 0,
GROUP_CONCAT(ord ORDER BY CAST(ord AS SIGNED)),
GROUP_CONCAT(ord ORDER BY ord ) ) AS res
FROM gc
GROUP BY gr
results in
gr res
0 1,1,2,2,3,5,11,12
1 1,1,11,12,2,2,3,5