Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> jak polaczyc 2 tabele...
snipe
post
Post #1





Grupa: Zarejestrowani
Postów: 135
Pomógł: 1
Dołączył: 5.10.2005
Skąd: Opole/Chorzów

Ostrzeżenie: (0%)
-----


Mam dwie tabele:

  1. --
  2. -- Struktura tabeli dla `osoby`
  3. --
  4.  
  5. CREATE TABLE `osoby` (
  6. `id_osoby` int(11) NOT NULL AUTO_INCREMENT,
  7. `user_name` varchar(20) NOT NULL DEFAULT '',
  8. `user_password` varchar(50) NOT NULL DEFAULT '',
  9. `data_zalozenia` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  10. `active` enum('y','n') NOT NULL DEFAULT 'n',
  11. `ban` enum('n','y') NOT NULL DEFAULT 'n',
  12. `plec` enum('m','k') NOT NULL DEFAULT 'm',
  13. `wzrost` varchar(7) NOT NULL DEFAULT '',
  14. `rok_ur` varchar(4) NOT NULL DEFAULT '',
  15. `miejscowosc` varchar(30) NOT NULL DEFAULT '',
  16. `opis` varchar(160) NOT NULL DEFAULT '',
  17. `email` varchar(50) NOT NULL DEFAULT '',
  18. `nr_gg` varchar(7) DEFAULT NULL,
  19. `nr_tlen` varchar(50) DEFAULT NULL,
  20. PRIMARY KEY (`id_osoby`),
  21. UNIQUE KEY `user_name` (`user_name`)
  22. ) TYPE=MyISAM;
  23.  
  24.  
  25. --
  26. -- Struktura tabeli dla `zdjecia`
  27. --
  28.  
  29. CREATE TABLE `zdjecia` (
  30. `id_zdjecia` int(11) NOT NULL AUTO_INCREMENT,
  31. `id_osoby` int(11) NOT NULL DEFAULT '0',
  32. `nazwa` varchar(20) NOT NULL DEFAULT '',
  33. `domyslnie` enum('y','n') NOT NULL DEFAULT 'n',
  34. `opis` varchar(160) NOT NULL DEFAULT '',
  35. PRIMARY KEY (`id_zdjecia`),
  36. KEY `id_osoby` (`id_osoby`)
  37. ) TYPE=MyISAM;


I chcialbym wydobyc niektore dane z tabeli oraz wszystkie fotki przypisane do jednej osoby (po jej id), daje takie zapytanie:

  1. SELECT osoby.id_osoby, osoby.plec, osoby.user_name, osoby.miejscowosc, osoby.opis, osoby.rok_ur, zdjecia.nazwa
  2. FROM `osoby`, `zdjecia` WHERE osoby.id_osoby=zdjecia.id_osoby AND osoby.id_osoby='1' AND osoby.active='y';


i wywala mi np.:
*************************** 1. row ***************************
id_osoby: 1
plec: m
user_name: ddd
miejscowosc: Warsaw
opis:
rok_ur: 1989
nazwa: foto.jpg
*************************** 2. row ***************************
id_osoby: 1
plec: m
user_name: ddd
miejscowosc: Warsaw
opis:
rok_ur: 1989
nazwa: foto.jpg
2 rows in set (0.00 sec)

A ja chcialbym aby wszystkie nazwy fotek byly w jednym wierszu(rekordzie). Jak to zrobic??
ps. jestem poczatkujacy w mysql :]

Z gory dziekuje za pomoc
Go to the top of the page
+Quote Post
kszychu
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 712
Pomógł: 23
Dołączył: 27.10.2003
Skąd: z kontowni

Ostrzeżenie: (0%)
-----


W jednym wierszu to raczej sięnie da. Wź to co dostajesz teraz i obrób sobie w php.
Go to the top of the page
+Quote Post
Kocurro
post
Post #3





Grupa: Zarejestrowani
Postów: 461
Pomógł: 32
Dołączył: 17.09.2003
Skąd: Łódź

Ostrzeżenie: (0%)
-----


W jednym sie da - nalezy uzyc grupowania z laczeniem ciagow. A potem w php rozdzielic ciag.

Efekt uzyskasz odpowiedni ale zapytanie sie lekko skomplikuje. Jutro podam Ci jego wyglad bo dzis nie mam jak sprawdzic.
Go to the top of the page
+Quote Post
snipe
post
Post #4





Grupa: Zarejestrowani
Postów: 135
Pomógł: 1
Dołączył: 5.10.2005
Skąd: Opole/Chorzów

Ostrzeżenie: (0%)
-----


Prometeus jakbys mogl podac, z gory dzieki (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
SongoQ
post
Post #5





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

Ostrzeżenie: (0%)
-----


Z tego co zrozumialem to chesz dokladac jako kolejne tabele w from. Max mozna tak uzyc 5 bo pozniej wydajnosc zapytania spada. Takie podejscie do tego problemu jest nieoptymalne.
Go to the top of the page
+Quote Post
snipe
post
Post #6





Grupa: Zarejestrowani
Postów: 135
Pomógł: 1
Dołączył: 5.10.2005
Skąd: Opole/Chorzów

Ostrzeżenie: (0%)
-----


Cytat(SongoQ @ 2005-10-05 11:11:39)
Z tego co zrozumialem to chesz dokladac jako kolejne tabele w from. Max mozna tak uzyc 5 bo pozniej wydajnosc zapytania spada. Takie podejscie do tego problemu jest nieoptymalne.

SongoQ, chodzi mi o to ze np bedzie mi wyswietlac dane osobowe i fotki do tych danych np.

NIE TAK!
*************************** 1. row ***************************
id_osoby: 1
plec: m
user_name: ddd
miejscowosc: Warsaw
opis:
rok_ur: 1989
nazwa: foto.jpg
*************************** 2. row ***************************
id_osoby: 1
plec: m
user_name: ddd
miejscowosc: Warsaw
opis:
rok_ur: 1989
nazwa: foto2.jpg
*************************** 3. row ***************************
id_osoby: 1
plec: m
user_name: ddd
miejscowosc: Warsaw
opis:
rok_ur: 1989
nazwa: foto3.jpg
3 rows in set (0.23 sec)

Ale TAK!!
*************************** 1. row ***************************
id_osoby: 1
plec: m
user_name: ddd
miejscowosc: Warsaw
opis:
rok_ur: 1989
nazwa: foto.jpg,foto1.jpg,foto2.jpg


Chodzi mi o mniej wiecej cos takiego, da sie to zrobic??
Go to the top of the page
+Quote Post
popo
post
Post #7





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 15.07.2005

Ostrzeżenie: (0%)
-----


ja bym proponowal poprostu 2 zapytania sql jedno buduje tablice z danymi osob a 2 buduje tablice z fotkami osoby i podpina jako pole w tablicy osob metoda moze nie jest optymalna pod wzgledem predkosci (zapytanie do tabeli zdjec zostanie powtorzone dla kazdej osoby) ale chyba dosc proste w realizacji
Go to the top of the page
+Quote Post
SongoQ
post
Post #8





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

Ostrzeżenie: (0%)
-----


W MySQLu raczej watpie czy sie da tak zrobic.
Go to the top of the page
+Quote Post
NuLL
post
Post #9





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

Ostrzeżenie: (0%)
-----


  1. SELECT
  2. o.user_name AS nazwa,
  3. GROUP_CONCAT(z.nazwa SEPARATOR ',') AS obrazki
  4. FROM osoby o
  5. LEFT JOIN zdjecia z ON z.id_osoby=o.id_osoby
  6. GROUP BY o.id_osoby

Rest is silence (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) MySQL 4.1 naturalnie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
SongoQ
post
Post #10





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

Ostrzeżenie: (0%)
-----


GROUP_CONCAT (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

@NuLL Dzieki za info.
Go to the top of the page
+Quote Post
snipe
post
Post #11





Grupa: Zarejestrowani
Postów: 135
Pomógł: 1
Dołączył: 5.10.2005
Skąd: Opole/Chorzów

Ostrzeżenie: (0%)
-----


a jak to wpisac na moim przykladzie?? (IMG:http://forum.php.pl/style_emoticons/default/sadsmiley02.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 11:01