mam ten stół, który używam (ale nie tylko) do przechowywania przyjaciół w bazie danych:Przyjaciele test użytkownika + wspólnego przyjaciela z innym użytkownikiem
user_1 | user_2 | status
gdzie „status” może być -1,0 lub 1. Tutaj rozważymy tylko przypadki, gdy status to "0" (oczekujący na użytkownika_1) lub "1" (zatwierdzony przez użytkownika_2). Mam następującą kwerendę, aby szukać w oczekiwaniu/zatwierdzonych znajomych na danym $ user:
SELECT user_1,user_2,status
FROM Friends
WHERE (user_2 = '$user' OR user_1 = '$user') AND status >= 0;
Naszym celem jest, aby zmodyfikować zapytanie również stwierdzić, czy dana $ użytkownik2 jest częstym (zatwierdzone) przyjaciel $ user1 i każdy (zatwierdzony) przyjaciel użytkownika $ user1.
Po kilku badaniach, doszedłem do wniosku, że lewe dołączenie mogłoby załatwić sprawę, ustawiając inne pole na NULL (jeśli nie jest wzajemne) lub $ user2. Chciałbym to zrobić wydajnie. Próbowałem kilku ujęć, ale bez powodzenia.
Dzięki autorstwa góry za pomoc
EDIT: Na przykład, powiedzmy, że mamy następujące dane:
a | b | 1
c | a | 1
c | b | 1
a | d | 1
chcę do listy znajomych „A” i dla każdego znajomego f "a", sprawdź, czy "b" jest wspólnym przyjacielem f i "a". Również f =/= b dla wzajemnego testu. Rezultatem takiego zapytania byłoby:
a | b | 1 | NULL
c | a | 1 | b
a | d | 1 | NULL
Daj mi znać, jeśli potrzebujesz więcej wyjaśnień
Nie rozumiem tego :-) Co chciałbyś dostać? Może jakiś krótki przykład? –
i gdzie jest 'c | a | 1 | d'? Nie zrobiłbym tego w MySQL, ale w PHP lub w jakimkolwiek innym języku, którego używasz ... MySQL będzie wolniejszy w większych zestawach danych. –
The 4th field shoult testuje tylko wzajemną przyjaźń z "b", dlatego linia, którą sugerujesz, nie powinna się pojawiać. Inną możliwością byłoby wykonanie tego w PHP i wysłanie zapytania na hasło, aby przetestować wzajemną przyjaźń z "b". Obawiałem się jednak, że wysyłanie zapytań wielokrotnych w ten sposób będzie wolniejsze niż wysyłanie pojedynczego zapytania z lewym złączeniem. Ale może masz rację, chciałbym zobaczyć podobne testy porównawcze dotyczące tego –