Soy bastante novato en el tema de las bases de datos, y me ha surgido el siguiente problema trabajando con MySQL.
Tengo una tabla (llamémosla "tabla1") en la cual uno de los campos puede contener un número de valores variable, es decir, que puede estar vacío o tener 2, 3, 4, etc., no puedo controlar el número máximo de valores que puede llegar a tener. Para solucionarlo, en vez de crear ese campo en la tabla, he creado dos tablas más para relacionar las 3 entre sí: una con los valores que ese campo de la tabla1 podría contener ("tabla2", con los campos "id_descriptor" y "descriptor"), y otra ("tabla3") que relaciona las ids de la tabla1 con el "id_descriptor" de la tabla2.
De esta manera, si por ejemplo un elemento de la tabla1 tiene un descriptor, en la tabla3 habría una fila con el id correspodiente a ese elemento de la tabla1 y el id del descriptor de la tabla2, si un elemento tiene 2 descriptores, en la tabla3 habría dos filas con la id del elemento, y en cada fila la id del descriptor que corresponda. Hasta aquí todo bien, lo tengo solucionado con la siguiente consulta:
SELECT t1.elemento, GROUP_CONCAT( t2.descriptor
SEPARATOR ", " ) AS descriptores
FROM tabla1 t1, tabla 2 t2, tabla3 t3
WHERE t1.id_elemento >0
AND t1.id_elemento = t3.id_elemento
AND t2.id_descriptor = t3.id_descriptor
GROUP BY t1.elemento
Esta consulta me devuelve el nombre del elemento con sus descriptores concatenados, que es lo que buscaba. El problema es que esta consulta solo me devuelve aquellos elementos cuya id tb está en la tabla3, es decir, aquellos elementos que tienen descriptores y yo necesito que me devuelva TODOS los elementos, incluso aquellos que no tienen descriptor, y que en la columna "descriptores" ponga "ninguno" (o algo parecido) para aquellos elementos que no tienen descriptor. Algo así:
Código PHP:
Elemento Descriptores
-------- ----------------
algo descriptor1, descriptor2
algo ninguno
algo descriptor5
...
Muchas gracias!!
Saludos!!