Why can't you use 0 with MEDIUMINT UNSIGNED???
Oh, I see...because you can't have a PRIMARY KEY with value 0 in that case.
I had a similar problem, but my primary key field was signed, not unsigned, so I just used -1 as my "catch all" and that you can do. I don't know why MySQL treats zero as "poison".
Hate to say it, but under the circumstances I'd go with the "1 means not a member" hack.
An optimist sees the glass as half full.
A pessimist sees the glass as half empty.
A realist drinks it no matter how much there is.