Hola, la verdad es que no me queda muy clara la pregunta, pero no sería tan simple como hacer esto:
Código PHP:
$usuario_sesion = $_SESSION['usuario'];
y después hacer esta consulta:
Código:
select *
from Productos, Usuario, categoria
where Productos.categoria = Usuario.categoria and
Usuario.usuario = '$usuario_sesion'
La verdad es que yo lo de las categorías no lo haría así, sino utilizando un array de valores booleanos (0,1) de manera que la posición en el array indicara el número de la categoría y el valor del array en esa posición si está seleccionada o no.
Ejemplo:
1 0 0 1 1 0 ... --> Categorías 1, 4 y 5 elegidas. El resto no.
De esta manera podrías utilizar la operación AND (&) a nivel de bits para comprobar las categorías elegidas de una manera muy rápida.
Ejemplo:
Mi vector: 1 0 0 1 1 0 ....
Quiero comprobar si están elegidas las categorías 1, 2 y 3.
Solución: (1 0 0 1 1 0 ...) AND (1 1 1 0 0 0 ...)
Espero que te sirva