To generate a distinct list of "numbers" from all of your strings:
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(t.id_numbers,',',d.i+1),',',-1) AS n
FROM mytable t
JOIN ( SELECT 0 AS i
UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3
UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6
UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9
) d
ON d.i <= ( CHAR_LENGTH(t.id_numbers)
- CHAR_LENGTH(REPLACE(t.id_numbers,',','')) )
GROUP BY n
HAVING n <> ''
To put that back into a comma separated list (ARRGGHH! WHY do we want to that?), we can use the query above as an inline view...
SELECT GROUP_CONCAT(q.n ORDER BY q.n+0) AS id_numbers
FROM ( SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(t.id_numbers,',',d.i+1),',',-1) AS n
FROM mytable t
JOIN ( SELECT 0 AS i
UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3
UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6
UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9
) d
ON d.i <= ( CHAR_LENGTH(t.id_numbers)
- CHAR_LENGTH(REPLACE(t.id_numbers,',','')) )
GROUP BY n
HAVING n <> ''
) q
This is essentially the same answer that was given to the question that Mark identified as a possible duplicate.
Rather than explain how all of that that works, I'm going to suggest that you AVOID storing comma separated lists of a values as a string.
I recommend you take a look at Chapter 2 of Bill Karwin's excellent book "SQL Antipatterns: Avoiding the Pitfalls of Database Programming".
http://www.amazon.com/SQL-Antipatterns-Programming-Pragmatic-Programmers/dp/1934356557
Those articles you saw that said this can't be done in MySQL, those articles are essentially right... you can't do this in SQL because you do not want to do this in SQL. Doing it does violence to the relational database model.