![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 74 Pomógł: 0 Dołączył: 18.06.2006 Ostrzeżenie: (0%) ![]() ![]() |
witam,
chce w projekcje zrobić możliwość dodawania do znajomych osób na portalu. Czyli np. osoba A dodaje do znajomych osobe B i dopiero jak osoba B potwierdzi, to wtedy oglądający profil osoby A będą widzieć ze w znajomych(przyjaciele) ma osobę B oraz w profilu osoby B będzie widać, że ma w znajomych osobę A. Zastanawiam sie czy zrobić do tego tabele taką: Kod id | id_uzytkownika | id_przyjaciela | zaakceptował_uzytkownik | zaakceptowal_przyjaciel tylko pojawia sie problem z wyswietlaniem znajomych, bo zarówno osoba moze być w kolumnie id_uzytkownika lub tez w id_przyjaciela Czy moze lepiej zrobić taka tabele Kod id | id_uzytkownika | id_przyjaciela | zaakceptował_przyjaciel i tutaj po dodawaniu do znajomych dodawane bylyby dwa rekordy (jeden dla uzytkownika, drugi dla przyjaciela), ale tutaj z kolei byloby klopotliwe sprawdzanie dwóch wierszy czy sa zaakceptowane zeby wyswietlic czy sa przyjaciółmi czy nie. Najprosciej chodzi i o relacje przyjaciele - obustronna zgoda tak jak na naszej klasie np jest. |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 1 033 Pomógł: 125 Dołączył: 17.09.2005 Skąd: Żywiec Ostrzeżenie: (0%) ![]() ![]() |
A może dwie tabele? Jedna do przechowywania znajomości, druga do przechowywania zaproszeń:
connections Kod +------------+------------+ | ID_user1 | ID_user2 | +------------+------------+ | 111 | 223 | | 33 | 111 | | 33 | 29 | Indeksy na obie kolumny + UNIQUE( ID_user1, ID_user2 ) invitations Kod +-----------+-------------------+ | ID_user | ID_invited_user | +-----------+-------------------+ | 111 | 9983 | | 111 | 233 | | 43 | 9983 | | 111 | 17 | Indeksy na obie kolumny + UNIQUE( ID_user, ID_invited_user ) 1. Jeśli user 123 zaprasza usera 334, to dodajesz jeden wiersz do tabeli zaproszenia:
2. User 123 chce zobaczyć kogo zaprosił:
3. User 334 chce zobaczyć przez kogo został zaproszony:
4. User 334 odrzuca zaproszenie od 123:
5. User 334 akceptuje zaproszenie od 123:
6.Wszyscy znajomi usera 123:
lub:
Tutaj musisz sobie sprawdzić przez EXPLAIN czy pierwsze zapytanie będzie korzystało z indeksów (nie jestem tego pewien) Jeśli nie, a to drugie korzysta, to stosuj to drugie. Jeśli nie wiesz o co chodzi stosuj to pierwsze ![]() Przy pobieraniu znajomości ID znajomego może pojawić się w pierwszej lub drugiej kolumnie - trzeba to sobie sprawdzić w PHP przy pomocy IF-a. W zamian za to masz oszczędność miejsca: jedna znajomość - jeden wiersz w tabeli. Ten post edytował Kicok 20.08.2008, 22:14:56 -------------------- "Sumienie mam czyste, bo nieużywane."
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 Pomógł: 0 Dołączył: 2.11.2008 Ostrzeżenie: (0%) ![]() ![]() |
Niekoniecznie trzebato robić w php ifem. Wyobraź sobie, że musisz wyszukać wśrod znajomych wszystkich, którzy mają na przykład określoną datę urodzenia. Wtedy najlepiej potraktować wyniki wyszukiwania w znajomych jako tabelę tymczasową. Ale wtedy musisz jednym poleceniem SQL wywołać listę znajomych. Wczoraj się nad tym głowiłem (raczej niedoświadczony w tym jestem) i wymyśliłem następujące zapytanie:
SELECT IF(ID_user1 = 123, ID_user2, ID_user1) AS friend FROM connectionsWHERE ID_user1=123 OR ID_user2=123; Teraz pobierasz jedną kolumnę - friend (alias). I możesz dodać dalsze warunki, co jest dość ważne moim zdaniem. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 05:49 |