Well, I don't think I'm going to get a clear picture unless you show some example data in your table and an example of the result you want.
I don't understand why DISTINCT would give you back two identical values, but if you don't care which one you get, you can limit the output to one:
SELECT DISTINCT from_id, PK_msg_id FROM msg WHERE to_id = '1' LIMIT 1
Or this way maybe:
SELECT DISTINCT from_id, PK_msg_id FROM msg WHERE to_id = '1' GROUP BY from_id
I'm not aware of DISTINCT only working on a primary key.
See:
http://dev.mysql.com/doc/mysql/en/distinct-optimization.html
EDIT:
I moved the DISTINCT part first, right after the SELECT to make the syntax right.
The first query will return one row back, while the second will return all the unique from_id's (could be more than one row). You can even take out the DISTINCT on the second query and you'd get the same results (because DISTINCT and GROUP BY do the same thing).