No i wszystko jasne.
Niestety masz trochę źle rozplanowane tabele. To co napiszę, będzie czasem wręcz niesłychanie proste i oczywiste, ale chciałbym aby inni ewentualnie też mogli z tego skorzystać w przyszłości gdy będą szukać opcji łączenia tabel, lub będą mieli podobny problem.
Zacznijmy od tego, że najpierw tworzysz (już ją masz, ale idę po kolei) tabelę z użytkownikami.
UŻYTKOWNICY
-
id_użytkownika - numerek dzięki któremu użytkownik będzie rozpoznawalny. Ten numer wykorzystamy również wszędzie tam gdzie będą dane tego użytkownika. Jest to tzw klucz podstawowy, który ułatwi nam wyszukiwanie i wydobywanie danych z tabeli - primary key.
-
pozostałe pola - czyli nazwa użytkownika, haslo, opis, link do avatara.
Delikatna sugestia - nie potrzebujesz mieć pola hasłowego 255 znakowego. Powinieneś skorzystać z jakiejś funkcji haszującej to po pierwsze, np md5, wtedy można spokojnie dać char(32) i tabela mocno przyśpieszy. Ewentualnie jeśli potrzebujesz mieć hasła luzem (a bywa tak) - sądzę że spokojnie 20 znaków by wystarczyło, jak chcesz być mocno przesądny to możesz dać 50. Plus opis_uztkownika chyba dałbym tinytext, ale trudno mi powiedzieć, co tam planujesz aby było. Reszta pól to kwestia gustu i tego jak mocno chcemy optymalizować bazę. Można zmniejszyć nazwę użytkownika i link do avataru i tak dalej.
Tabela GALERIA_USER - najistotniejsze jest tutaj. Z tego co widzę to wrzucasz kolejne zdjęcia uploadowane przez usera jako kolejne rekordy (wiersze) do tabeli. Dobrze.
Czysto teoretycznie tabela Galerii powinna jednak wyglądać tak.
GALERIA_USER
-
id_zdjecia - numer identyfikacyjny zdjęcia, który powinien być kluczem głównym i unikalnym (wystarczy więc PRIMARY KEY z auto incrementem)
-
id_usera - numer identyfikacyjny użytkownika, który wstawił zdjęcie aby wiedzieć kto wstawił zdjęcie ;D jest to tak zwany klucz zewnętrzny, dla ułatwienia wyszukiwania dobrze było by tu również ustawić klucz.
-
nazwa_zdjecia
- opis_zdjęcia… itd.
Teraz, jeśli chcemy uzyskać spis zdjęć użytkownika robimy zapytanie (zapytanie jest nieoptymalne, ale chodzi o idee):
SELECT * FROM galeria_user WHERE id_user = ".$id_usera."
I tyle. W wyniku otrzymamy listę w której są tylko zdjęcia tego jednego użytkownika którego id podaliśmy w zmiennej $id_usera. Teraz jeśli byśmy chcieli otrzymać listę wszystkich zdjęć ale zamiast pola id_usera które nic nam nie mówi, aby była nazwa usera. Musimy zrobić JOINA
SELECT * FROM galeria_user LEFT JOIN uzytkownicy ON id_usera=uzytkownicy
Niestety to zapytanie jest mocno nieoptymalne gdyż korzystamy z gwiazdki. Poprawimy je trochę.
SELECT id_zdjęcia, nazwa_zdjecia, opis_zdjecia, link_zdjecia, nazwa_uzytkownika FROM galeria_user LEFT JOIN uzytkownicy ON galeria_user.id_usera=uzytkownicy.id_uzytkownika
Wyspecyfikowaliśmy tylko te pola które są potrzebne co znacznie przyśpieszy zapytanie. Możemy jeszcze dodać na końcu LIMIT ‘początek’, ‘liczba’ aby ograniczyć i jeszcze bardziej przyśpieszyć, ale to już zależy od architektury strony.
Pozwolę sobie na kilka uwag odnośnie kodu PHP. W sesji przechowujesz ‘nick’ użtkownika i używając go przeszukujesz tablę użytkowników. Gdy masz siedmiu lub 20 userów. Jest nawet ok. Ale przy dużej ilości, nie jest to optymalne rozwiązanie (w sumie nigdy nie jest optymalne, ale przy małej liczbie można wybaczyć).
Ogólnie masz bardzo chaotyczny kod, albo tak Ci się wkleił - could be.
Masz może pod ręką jakąś książkę MySQLową? Sam za nimi nie przepadam, ale poczytaj w wolnej chwili - zawsze znajdzie się tam parę ciekawostek, które usprawnią Twoje bazy. :]
Życzę powodzenia a jakby coś jeszcze było, śmiało pytaj ;p