Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [sql] pobranie id z listy znajomych
szczypior
post
Post #1





Grupa: Zarejestrowani
Postów: 98
Pomógł: 0
Dołączył: 5.02.2007

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


Witam

Robię do swojej stronki coś w stylu listy znajomych takiej jak we wszystkich serwisach społecznościowych.

Mam tabele znajomi w której są kolumny

| id_1 | id_2 | akt |

Pierwsza kolumna przechowuje id jednej osoby, a druga drugiej, które się znają. KOlumna akt przechowuje boolowską zmienną czy zapraszana osoba już akceptowała znajomość czy nie.

Żeby pobrać znajomych użytkownika x musze przeszukać obie kolumny pod względem idx'a tam gdzie akt=1 i joinować drugą tabele żeby pobrać imiona jego znajomych.

Pytanie moje brzmi czy można to zrobić wszystko w jednym zapytaniu?

Bo w dwóch można tak:
  1. SELECT login FROM users WHERE id=(SELECT id_1 FROM znajomi WHERE id_2 = 'idx' AND akt = '1')

a potem drugą kolumnę
  1. SELECT login FROM users WHERE id=(SELECT id_2 FROM znajomi WHERE id_1 = 'idx' AND akt = '1')

Ale wtedy robią się naprawdę 4 zapytania (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)

Przy takim zapytaniu:
  1. SELECT id_1,id_2 FROM users WHERE (id_1='idx' OR id_2='idx') AND akt ='1'

dostane dwie kolumny i w jednej albo w drugiej w każdym wierszu bedzie idx, ktore jest zbedne i tylko niepotrzebnie zwieksza bazie czas wykonywania select'a. Czy jest możliwość odrzucenia idx i uzyskania jednej kolumny z samymi id jego znajomych?

I w ogóle czy takie rozwiązania usługi "znajomych" są dobre, czy znacie jakiś lepszy patent?
Go to the top of the page
+Quote Post
phpion
post
Post #2





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Spróbuj tak aczkolwiek nie sprawdzałem tego:
  1. SELECT IF (id_1 = 'idx', id_1, id_2) AS kumpel FROM users WHERE (id_1='idx' OR id_2='idx') AND akt ='1';
Go to the top of the page
+Quote Post
szczypior
post
Post #3





Grupa: Zarejestrowani
Postów: 98
Pomógł: 0
Dołączył: 5.02.2007

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


Super, dzięki!

Wprowadziłem tylko małą zmianę, bo podane przez Ciebie rozwiązanie pobierało idx. Po zmianie id_1 = 'idx' na id_2 = 'idx' działa świetnie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował szczypior 28.09.2007, 14:47:35
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: 18.09.2025 - 16:16