![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 142 Pomógł: 3 Dołączył: 27.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
mam problem ze strukturą bazy danych oraz sposobem rozwiązania dla następującego zagadnienia: na stronie użytkonicy mają możliwości dodawania przyjaciół, więc do tego zrobiłem tabelez polami: user_id,friend_id będzie dużo użytkowników więc istnieje osobna tabela, dla uzytkowników zignorowanych i czekających na akceptację: user_id,friend_id,type wiadomo po zaakceptowaniu użytkownik zostaje przeniesiony do pierwszej tabeli Teraz jeśli wchodzę na stronę jakiegoś użytkownika to chcę zobaczyć wspólnych przyjaciół oraz takich, których tylko on ma... opis tego problemu jest opisany w wątku: Temat: mysql Jak wykonac zapytanie do bazy //czyli dotąd można powiedzieć, że mam gotowe i wiem jak zrobić Do tego pojawia sie jeszcze jedno zagadnienie, gdy wejdę na stronę użytkownika, który nie jest moim znajomym, a jest znajomym mojego znajomego to musi się tam wyświetlić powiązanie, tj "ja -> mój znajomy -> użytkownik na którego stronie jestem" obsługiwane ma być maksymalnie 4 krotne zagłębianie, np "ja -> mój znajomy -> znjomy znajomego -> użytkownik" gdy do tego użytkownika nie ma powiązania w 4 krokach nic się nie wyświetla Mógłby ktoś poradzić jak zaprojektować bazę dla tych powiązań i jak mniej więcej rowzwiązać to od strony php? Myślę, że jeśli będe miał już bazę z php będzie mniejszy problem. //Nie wiedziałem gdzie lepiej pasuje ten wątek d baz danych czy php, ale wyszło, że znalazł sie tutaj Ten post edytował mrjozo 6.07.2007, 11:53:32 -------------------- W chwili wolnego zapraszam na gry Dla każdego coś się znajdzie;)
|
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 43 Pomógł: 1 Dołączył: 23.05.2007 Skąd: Gliwice Ostrzeżenie: (0%) ![]() ![]() |
Hej żeby to zrobić musisz korzystać ze złączeń w zapytaniach SQL (wielokrotne złączanie tabeli user_friend samej ze sobą)
Wspólnych znajomych mozesz wyciągnąć poprzez podzapytanie tak jak to jest zrobione w wątku o którym wspominasz, ale możesz też to wykonać przez złączenie. Aby wydobyć wspólnych znajomych (czyli relacja U1->znajomy U1-> U2)
Aby wydobyć więcej pośrednich znajomych trzeba wykonać więcej złączeń:
Nie wiem na ile znasz SQLa ale wyjaśnię kilka rzeczy które mogą być dla Ciebie nie zrozumiałe: 1) Poczytaj o złączeniach (JOIN ... ON) 2) " uf1.user_id AS 'u1' " - to przypisanie nazwy kolumnie (niezależnej od nazwy pola) 3) uf1 uf2 uf3 to aliasy w celu rozróżnienia które pole do której tabeli należy bo przy złączeniach zawsze trzeba to określić zwłaszcza gdy pola mają te same nazwy (co zawsze sie zadarzy gdy złączamy tabelę ze samą sobą). Nie gwarantuje ze te zapytania odrazu zadziałają bo nie sprawdzałem ich na żadnej bazie... Ale ogólna koncepcja napewno jest dobra:) Poczytaj o złączeniach! A tak na marginesie to nie potrzebujesz dwóch tabel typu "user_friend" możesz to spokojnie trzymać w jednej tabeli i własnie pole "type" niech określa w jakim stanie jest relacja przyjaciół i w powyższych zapytaniach w klauzuli WHERE dodaj wymóg co do wartości tego pola w każdej ze złączanych tabel. Czyli jesli np. Type=1 określa że relacja jest "zaakceptowana przez obie strony" to musisz dodać do WHERE
Powodzenia |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 14:17 |