Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2008-02-15 02:10:49

  ukasz - Użytkownik

ukasz
Użytkownik
Skąd: wroclaw
Zarejestrowany: 2006-06-21

[SOLVED] mysql skomplikowane zapytanie. laczenie wierszy w calosc

Witam

Borykam sie z pewnym problemem. Mam 2 tabele w ktorych jest:

to sa tylko dane testowe :P

Kod:

mysql> select * from cds;
+-------+-------+---------------------+------------+
| cd_id | owner | date                | carrier_id |
+-------+-------+---------------------+------------+
|     1 |     1 | 2008-02-09 02:01:31 |          1 |
|     2 |     1 | 2008-02-09 02:01:31 |          1 |
|     3 |     1 | 2008-02-09 02:01:31 |          2 |
|     4 |     1 | 2008-02-10 15:25:32 |          2 |
+-------+-------+---------------------+------------+
4 rows in set (0.00 sec)


mysql> select * from titles;
+----------+---------+-------+------------------------+------+
| title_id | type_id | cd_id | title                  | size |
+----------+---------+-------+------------------------+------+
|        1 |       1 |     1 | Quake 3                | NULL |
|        2 |       1 |     2 | Sudden Strike 2        | NULL |
|        3 |       7 |     3 | Gorace wargi sromowe 3 | NULL |
|        4 |       7 |     3 | Seksolatki             | NULL |
|        5 |       1 |     4 | Cyberia                |  200 |
|        6 |    NULL |     5 | Warcraft 3             | NULL |
+----------+---------+-------+------------------------+------+
6 rows in set (0.00 sec)

Miedzy tabela cds a titles zachodzi relacja 1 do n. 

Probowalem robic podzapytania ale nie da rady bo krzyczy ze subquery ma wiecej niz jedna linia. co jest prawda w niektorych przypadkach.
Robie joina tory pokazuje:

Kod:

select cds.cd_id, titles.title from cds left join titles on cds.cd_id = titles.cd_id;
+-------+------------------------+
| cd_id | title                  |
+-------+------------------------+
|     1 | Quake 3                |
|     2 | Sudden Strike 2        |
|     3 | Gorace wargi sromowe 3 |
|     3 | Seksolatki             |
|     4 | Cyberia                |
+-------+------------------------+
5 rows in set (0.00 sec)

czy da sie ten wynik jakos sformatowac w taki sposob ze jak pojawia sie wiersze z takimi samymi cd_id (tutaj akurat cd_id = 3) to zeby wylistowac cd_id na jednym wierszu a tytuly jakie sa polaczyc i oddzielic od siebie jakims separatorem.

jest cos takiego jak concat w mysqlu ale on laczy kolumny a mi chodzi o wiersze.




OK udalo mi sie cos znalezc na ten temat.

GROUP_CONCAT

Kod:

mysql> select cd_id, group_concat(title separator '<br/>') as title from titles group by cd_id;
+-------+---------------------------------------+
| cd_id | title                                 |
+-------+---------------------------------------+
|     1 | Quake 3                               |
|     2 | Sudden Strike 2                       |
|     3 | Gorace wargi sromowe 3<br/>Seksolatki |
|     4 | Cyberia                               |
|     5 | Warcraft 3                            |
+-------+---------------------------------------+
5 rows in set (0.00 sec)

wszystko mozna znalezc na stronie http://dev.mysql.com/doc/refman/5.0/en/group-by-fun … _group-concat

Ostatnio edytowany przez ukasz (2008-02-15 02:58:01)


http://wiblo.pl/wilk/userbars/debian_user_black.png

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Nas ludzie lubią po prostu, a nie klikając w przyciski ;-)