2012-03-20 14 views
18

W jednym z moich tabel przechowuję moje dane reklamowe, to jeden wiersz na reklamę. Przechowuję także niektóre daty w innym stole, ale to jeden wiersz na daną, ponieważ nie wiem, w jaki sposób datuje się konkretna reklama. Chcę wybrać al daty (gdzie ID adventisement = 1) w tym samym zapytaniu co wybór danych, oddzielone bij a komma. Jedynym problemem jest to, że mogę dostać tyle wierszy, ile jest daktyle, chcę tylko jeden wiersz danych z AL ... ..wybierz wiele wierszy w jednym wierszu wyników

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 

Wynik zapytania (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" 

Kolumna daty może być jeden ciąg z datami rozdzielonymi przecinkiem ....

Wszelkie pomysły?

Odpowiedz

24

Można użyć GROUP_CONCAT() i GROUP BY aby uzyskać pożądane rezultaty:

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 

ta zwraca wszystkie daty dla każdej reklamy, konkatenowaną przecinkami. Tam, gdzie nie ma dat w Tabeli 2 dla konkretnej reklamy, otrzymasz NULL dla kolumny dat.

Aby kierować konkretną reklamę, wystarczy dodać klauzulę 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

Tak to jest to! –

Powiązane problemy