Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: jak polaczyc 2 tabele...
Forum PHP.pl > Forum > Bazy danych > MySQL
snipe
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
kszychu
W jednym wierszu to raczej sięnie da. Wź to co dostajesz teraz i obrób sobie w php.
Kocurro
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.
snipe
Prometeus jakbys mogl podac, z gory dzieki smile.gif
SongoQ
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.
snipe
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??
popo
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
SongoQ
W MySQLu raczej watpie czy sie da tak zrobic.
NuLL
  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 tongue.gif MySQL 4.1 naturalnie smile.gif
SongoQ
GROUP_CONCAT smile.gif

@NuLL Dzieki za info.
snipe
a jak to wpisac na moim przykladzie?? sadsmiley02.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.