![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 662 Pomógł: 45 Dołączył: 26.03.2007 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Robię w pewnm projekcie listę przyjaciół. Będzie wyświetlane imie oraz fotka przyjaciół danego profilu. Baze chciałem stworzyć tak:
Kod USERS ID | Imie | Photo_ID PHOTOS ID | file_name FRIENDS USER ID | FRIEND ID Wpierw pobieram listę ID uzytkowników które odpowiadają podanym kryteriom (czyli czy uzytkownik jest czyims przyjacielem).Następnie pobieran dane użytkownika z tabeli "USERS", z pola "photo_id" pobieram wartość i pobieram z tabeli "PHOTOS" wpis o ID pobranym z pola "photo_id". Czyli jeśli ktoś będzie miał 10 przyjaciół, będe musiał pobrać 10 profili i 10 zdjęć czyli razem 20 (+1 pobierające liste przyjaciół) zapytań. Wychodzi trochę dużo, bo przy liczbe przyjaciół np. 500 to będzie aż 1000 zapytań. Jak lepiej zoragnizować to ? ps. Oczywiście cache będzie ale może istnieje wydajniejsze wyjście. Ten post edytował Moli 26.01.2008, 14:02:15 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
a JOINy?
znajduszesz friendsow gdzie user id jest id tego usera ktorego przegladasz dolaczasz info o userach (przyjaciol) i dolaczasz tabele ze zdjeciami do userow |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 662 Pomógł: 45 Dołączył: 26.03.2007 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
O kurde, zupelnie o tym zapomniałem (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Dzięki wielkie :]
|
|
|
![]()
Post
#4
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Kod USERS ID | Imie | Photo_ID PHOTOS ID | file_name FRIENDS USER ID | FRIEND ID Moim zdaniem masz błąd w strukturze baz danych. Rozumiem, że danemu userowi odpowiada 1 fotka w tabeli photos. W takim razie po co rozbijałeś to na 2 tabele? Wg mnie lepiej (poprawniej) będzie tak: Kod USERS ID | Imie | file_name FRIENDS USER ID | FRIEND ID Teraz trzeba napisać odpowiednie zapytanie SQL, które nie powinno być problemem. Jest tu tylko 1 pułapka: trzeba sprawdzić zarówno pole user_id oraz friend_id (co przeoczył ~dr_bonzo) bo przecież jeśli ktoś zna mnie to zazwyczaj i ja jego znam (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Całość wyglądałaby mniej-więcej tak:
DISTINCT aby usunąć ewentualne duble danych. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 662 Pomógł: 45 Dołączył: 26.03.2007 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Każdy użytkownik może mieć wiele fotek, nie chodzi mi o avatar o swoje fotki (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Cytat bo przecież jeśli ktoś zna mnie to zazwyczaj i ja jego znam Właśnie też o tym pomyślałem, dzięki temu będzie o połowę mniej wpisów w tabli (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Ten post edytował Moli 26.01.2008, 14:29:28 |
|
|
![]()
Post
#6
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Każdy użytkownik może mieć wiele fotek, nie chodzi mi o avatar o swoje fotki (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) No to muszę Cię zmartwić ale na Twojej obecnej strukturze również tego nie wykonasz: Kod USERS ID | Imie | Photo_ID PHOTOS ID | file_name W jaki sposób chcesz dodać drugie zdjęcie? Gdzie wstawisz ID drugiego zdjęcia? Potrzebujesz w takim razie jeszcze jedną tabelę: Kod user_photos: user_id, photo_id gdzie oba pola łącznie będą stanowić klucz główny, a każde z nich będzie kluczem obcym do odpowiedniej tabeli. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 813 Pomógł: 34 Dołączył: 18.03.2007 Skąd: o stamtąd Ostrzeżenie: (0%) ![]() ![]() |
off topic: phpion i to się nazywają awatary! xD
Ten post edytował b_chmura 26.01.2008, 14:37:08 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 662 Pomógł: 45 Dołączył: 26.03.2007 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
@phpion - Tabela ze zdjęciami wygląda dokladnie tak
Kod ID | USERID | ALBUMID | FILENAME Więc jak widzisz można ustawić kilka fotek dla 1 użytkownika (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Nie napisałem jak wygląda cała baza, bo reszta pól nie byla mi potrzebna do tego zapytania (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) ps. Może komuś się przyda, zapytanie jest takie
Jednak jest pewien błąd w tym zapytaniu. Jesli bede mial 2 uzytkownikow, jeden o ID = 1 a drugi o ID = 2 i w bazie bedzie wpis Kod UDI | FID 1 | 2 To dla użytkownika ID = 1 znajdzie przyjaciela (czyli ID=2), ale już dla użytkownika ID = 2 nie znajdzie nic. Chociaż powinno. Wie ktoś jaki błąd jest w zapytaniu ? Nie mogę do tego dojść. |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 82 Pomógł: 3 Dołączył: 15.01.2007 Ostrzeżenie: (10%) ![]() ![]() |
@phpion - Tabela ze zdjęciami wygląda dokladnie tak Kod ID | USERID | ALBUMID | FILENAME Więc jak widzisz można ustawić kilka fotek dla 1 użytkownika (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Nie napisałem jak wygląda cała baza, bo reszta pól nie byla mi potrzebna do tego zapytania (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) ps. Może komuś się przyda, zapytanie jest takie
Jednak jest pewien błąd w tym zapytaniu. Jesli bede mial 2 uzytkownikow, jeden o ID = 1 a drugi o ID = 2 i w bazie bedzie wpis Kod UDI | FID 1 | 2 To dla użytkownika ID = 1 znajdzie przyjaciela (czyli ID=2), ale już dla użytkownika ID = 2 nie znajdzie nic. Chociaż powinno. Wie ktoś jaki błąd jest w zapytaniu ? Nie mogę do tego dojść. Wpisuj do bazy dane o przyjaciolach 2 razy, uwierz mi ze lepiej trzymac sie prostoty, wiec dla usera 1 i 2 robisz dwa rekordy
Poza tym dobrze do tabeli users2friends dodac timestamy dla send_at, accepted_at i rejected at jesli chcesz wysylac zaproszenia (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 662 Pomógł: 45 Dołączył: 26.03.2007 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Wiem w czym był błąd.
Przez ten kawałek. Jeśli użytkownik nie miał ustawionego głównego zdjęcia to nie znajdywało go. Po rejestracji lub jeśli uzytkownik nie ustawi głównego zdjęcia, wartośc pola main_photo w tabeli users wynosi 0. Myślę że musze w zapytaniu użyć if. Jeśli u.main_photo <> 0 to dopiero wykonuje p.id = u.main_photo. NIestety nie mogę znaleść jak to zrobić, a w manualu mysql, jest to słabo opisane. Wie ktoś jak używać if w mysql ? ps. Zapytanie wygląda teraz tak
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 82 Pomógł: 3 Dołączył: 15.01.2007 Ostrzeżenie: (10%) ![]() ![]() |
Wiem w czym był błąd.
Przez ten kawałek. Jeśli użytkownik nie miał ustawionego głównego zdjęcia to nie znajdywało go. Po rejestracji lub jeśli uzytkownik nie ustawi głównego zdjęcia, wartośc pola main_photo w tabeli users wynosi 0. Myślę że musze w zapytaniu użyć if. Jeśli u.main_photo <> 0 to dopiero wykonuje p.id = u.main_photo. NIestety nie mogę znaleść jak to zrobić, a w manualu mysql, jest to słabo opisane. Wie ktoś jak używać if w mysql ? ps. Zapytanie wygląda teraz tak
Ale tu wystarczy left join na p.id = u.main_photo i jak bedzie mial fotke to zwroci jej pola a jak nie nulle |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 662 Pomógł: 45 Dołączył: 26.03.2007 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
No miałeś racje (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Dzięki za pomoc.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 08:11 |