2012-03-20 21 views
18

En una de mis tablas, almaceno mis datos publicitarios, eso es una fila por anuncio. También guardo algunas fechas en otra tabla, pero esa es una fila por fecha porque no sé cuántas fechas recibe un anuncio específico. Quiero seleccionar todas las fechas (donde ID adventisement = 1) en la misma consulta que la selección de datos, separadas por un komma. El único problema es que tengo tantas filas como fechas, quiero solamente una fila con los datos de otros ... ..seleccionar varias filas en una fila de resultados

Table 1 (Advertisements) 
ID_adv   data 1    data2 
1    name1    picture1 
2    name2    picture2 
3    name3    picture3 
4    name4    picture4 

Table 2 (Dates) 
ID ID_adv  date 
1  2  1-1-2012 
2  2  2-1-2012 
3  3  1-1-2012 
4  3  2-1-2012 
5  3  3-1-2012 
6  3  4-1-2012 

Resultado consulta (Select ID_adv, data1, data2, dates WHERE ID_adv = 3)

3,name3,picture3,"1-1-2012,2-1-2012,3-1-2012,4-1-2012" 

La columna de fechas puede ser una cuerda con todas las fechas separadas por una coma ...

¿Alguna idea?

Respuesta

24

Puede utilizar GROUP_CONCAT() y GROUP BY para obtener los resultados deseados:

SELECT t1.*, GROUP_CONCAT(t2.date) AS dates 
FROM Table1 t1 
LEFT JOIN Table2 t2 
    ON t2.ID_adv = t1.ID_adv 
GROUP BY t1.ID_adv 

Esto devuelve todas las fechas para cada anuncio, concatenados por comas. Donde no hay fechas en la Tabla 2 para un anuncio en particular, obtendrá NULL para la columna de fechas.

para dirigirse a un anuncio en particular, sólo tiene que añadir la cláusula WHERE:

SELECT t1.*, GROUP_CONCAT(t2.date) AS dates 
FROM Table1 t1 
LEFT JOIN Table2 t2 
    ON t2.ID_adv = t1.ID_adv 
WHERE t1.ID_adv = 3 
GROUP BY t1.ID_adv 
+0

Sí eso es todo! –

Cuestiones relacionadas