Pensé por un momento en la función GROUP_CONCAT(), como propone huesos52, pero si se fijan en el último ejemplo que da, tal parece que quiere que cada categoría vaya en una columna separada. En ese caso o crea la sentencia dinámicamente con IFs consecutivos, o bien los obtiene con múltiples JOINs.
En cualquiera de los dos casos hay que trabajar con ambas cosas: Programación y SQL.
Cita: ++++++++++++++++++++++++++++++++++++++++
+ COLUMNA1 + CATEGORIA 7 + CATEGORIA 8 + CATEGORIA 9 +
++++++++++++++++++++++++++++++++++++++++
+ usuario1 + X + NULL + X +
+ usuario2 + NULL + NULL + X +
+ usuario3 + X + X + X +
++++++++++++++++++++++++++++++++++++++++