It is possible, but the method to do it is better at persuading you to redesign your database than it is as something to use in a live environment.
You can generate a range of numbers by unioning constants together. It you union the numbers 0 to 9 and cross join that against itself you can generate the number 0 to 99 (and another cross join to give you 0 to 999, etc). You can use this with SUBSTRING_INDEX to split up the string based on commas.
As this will provide duplicates (using substring_index in this way will bring back the last one as many times as it takes to increase the number returned to the max number it copes with) you can then use DISTINCT.
SELECT DISTINCT SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(some_field, ',', 1 + units.i + tens.i * 10), ',', -1), ':', 1) AS id
FROM some_table
CROSS JOIN (SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) units
CROSS JOIN (SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) tens
WHERE SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(some_field, ',', 1 + units.i + tens.i * 10), ',', -1), ':', -1) = 6
If you wanted the duplicates returned the right number of times you need to check the number of comma separated values (compare the length of the field with the length of the field with all the commas replaced by nothing to get the number of commas):-
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(some_field, ',', 1 + units.i + tens.i * 10), ',', -1), ':', 1) AS id
FROM some_table
CROSS JOIN (SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) units
CROSS JOIN (SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) tens
WHERE SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(some_field, ',', 1 + units.i + tens.i * 10), ',', -1), ':', -1) = 6
AND (units.i + tens.i * 10) <= (LENGTH(some_field) - LENGTH(REPLACE(some_field, ',','')))
Note that both of these only cope with a max of 100 comma separated values. Easy to expand them to cope with more but that will also slow the queries down.
EDIT - to get the target course name for the status with the demo date you have now posted above:-
SELECT education_details.id, education.target_course_name
FROM education_details
CROSS JOIN (SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) units
CROSS JOIN (SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) tens
INNER JOIN education ON SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(status, ',', 1 + units.i + tens.i * 10), ',', -1), ':', 1) = education.id
WHERE SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(status, ',', 1 + units.i + tens.i * 10), ',', -1), ':', -1) = 6
AND (units.i + tens.i * 10) <= (LENGTH(status) - LENGTH(REPLACE(status, ',','')));
SQL fiddle for this:-
http://www.sqlfiddle.com/#!2/a2917/5