GROUP_CONCAT() вам поможет
blog.nagaychenko.com/2010/06/15/%D1%80%D0%B0%D0%B1...
пользоваться так:
TABLE POST {id, text}
TABLE CATEGORY {id, name}
TABLE CATEGORY_POST {id, category_id, post_id}
SELECT POST.id, POST.text, GROUP_CONCAT(CATEGORY.name SEPARATOR ', ') AS categories FROM POST
JOIN CATEGORY_POST ON (POST.id = CATEGORY_POST.post_id)
JOIN CATEGORY ON (CATEGORY.id = CATEGORY_POST.category_id)
GROUP BY POST.id, POST.text
но в чём проблема просто join-ить и потом в php циклом пройти и собрать в нужную структуру?