Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [sql] pobranie id z listy znajomych
Forum PHP.pl > Forum > Bazy danych > MySQL
szczypior
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 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?
phpion
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';
szczypior
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 smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.