Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Pobieranie listy znajomych
dkruczek
post
Post #1





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 12.07.2006

Ostrzeżenie: (0%)
-----


Mam system znajomych oparty na tabeli 'friends':

friends_id
friends_from
friends_to
friends_accepted

Do tego jest tabela z użytkownikami, która łączy się z tą:

(w skrócie)
user_id
user_login

Mam pytanie jak najprościej pobrać listę znajomych użytkownika x posortowaną według loginów?
Go to the top of the page
+Quote Post
em1X
post
Post #2





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

Ostrzeżenie: (0%)
-----


join + order by
Go to the top of the page
+Quote Post
dkruczek
post
Post #3





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 12.07.2006

Ostrzeżenie: (0%)
-----


Wszystko byłoby łatwe, gdyby id użytkownika było tylko w jednej kolumnie w tabeli friends. A przecież id może być i w kolumnie from, i w kolumnie to. I tutaj już problemu ogarnąć nie potrafię.
Go to the top of the page
+Quote Post
erix
post
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Dwa zapytania łączone przez UNION?
Go to the top of the page
+Quote Post
em1X
post
Post #5





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

Ostrzeżenie: (0%)
-----


nic nie rozumiem z tego co piszesz.. jeżeli masz problem z połączeniem dwóch tabel oznacza to, że tabele są źle zaprojektowane
Go to the top of the page
+Quote Post
dkruczek
post
Post #6





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 12.07.2006

Ostrzeżenie: (0%)
-----


Zobacz... jeśli chcę pobrać wszystkich znajomych użytkownika, to muszę z tabeli 'friends' pobrać wszystkie rekordy, w których jest on zapraszajacym, jak też te w których był zapraszany. Dodatkowo muszę pobrać dane każdego znajomego z tabeli 'users', czyli najprosciej można to zrealizować dwoma zapytaniami:

Kod
select * from friends, users where friends.from = 'x' and friends.to = users.user_id order by users.login


i drugie analogicznie tylko friends.to = 'x'.

Problem polega na tym, ze wtedy będę miał dwie porcje posortowanych danych, któe mogę conajwyżej zapisać w jednej tabeli. Dalej będą one jednak od siebie niezależne, bo wyjdzie coś takiego:

a
b
c
d
a
b
c
d

Cały myk polega na tym, że chcę odrazu uzyskać posortowaną całą tablicę z przyjaciółmi:

a
a
b
b
c
c
d
d

Ten post edytował dkruczek 2.07.2009, 19:21:18
Go to the top of the page
+Quote Post
erix
post
Post #7





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




  1. SELECT * FROM (SELECT * FROM friends, users WHERE friends.FROM <span style='color:orange'>= 'x' AND friends.TO = users.user_id) ORDER BY ORDER BY users.login

Klepane z palca.
Go to the top of the page
+Quote Post
dkruczek
post
Post #8





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 12.07.2006

Ostrzeżenie: (0%)
-----


To dalej nie jest to, to wybiera jedynie tych znajomych, których zaprosił użytkownik. Gdy to on był zaproszony przez kogoś ten ktoś już na liscie znajomych naszego użytkownika nie będzie figurował...

Ten post edytował dkruczek 2.07.2009, 23:01:01
Go to the top of the page
+Quote Post
erix
post
Post #9





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




A:
Kod
select * from friends left join users on friends.from = users.user_id UNION select * from friends left join users on friends.to = users.user_id
?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 15.09.2025 - 23:03