SELECT * FROM posts p WHERE p.id IN(
(SELECT DISTINCT
pu2.post_id
FROM (SELECT
t.post_id,
COUNT(1)
FROM (SELECT
pu.post_id,
cheked
FROM post_user pu
GROUP BY pu.post_id,
pu.cheked) t
GROUP BY t.post_id
HAVING COUNT(1) = 1) t2
LEFT JOIN post_user pu2
ON pu2.post_id = t2.post_id
WHERE pu2.cheked = "checked"))
SELECT
pu.post_id,
cheked
FROM post_user pu
GROUP BY pu.post_id,
pu.cheked
select * from ( select us.post_id,count(1) c from posts p
left join post_user us
on p.id = us.post_id
group by us.checked,p.post_id ) t
left join post_user us
on us.post_id = t.post_id
left join users u
on us.user_id = u.id
where t.c=1
Если не собираетесь передовать бинарные данные по сети такие как картинки, музыку. Тогда используйте json.
Думаю самое просто реализовать REST поверх HTTP используя какой-нибудь framework с поддержкой json.