Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
[PHP][MySQL] Tworzenie systemu znajomych
#1
Smile 
Myślę nad stworzeniem systemu znajomości który chcę napisać na swojej stronie. W tabeli users mam wszystkich zarejestrowanych użytkowników, oraz tabela znajomi gdzie będą przechowywane relacje pomiędzy użytkownikami.

Tabela users: id, login
Tabela znajomi: id, user_id, znajomy_id, status

Czy tym sposobem tabela znajomi nie będzie przeładowana zbyt dużą ilością danych?
Może ktoś z was ma inny pomysł na działanie takiego systemu to chętnie wysłucham
Odpowiedz
#2
To jest standardowy i zarazem najlepszy schemat relacji w takim systemie. Swego czasu na necie czytałem jak gość jakiś proponował robić dla każdego użytkownika tabele z jego znajomymi. Otóż taka tabela nie będzie przeładowana. Nie zamierzasz mieć 100 tys użytkowników chyba od razu Smile Zresztą nawet przy takiej liczbie innej relacji nie wymyślisz.
Jeżeli masz użytkownika A i B i są znajomymi to możesz przecież mieć tylko jeden rekord.
kto zaprasza, kogo zaprasza , status zaproszenia , data. Inna sytuacja jest jak system obserwacji jak na twitterze. Chociaż też można to jednym rekordem zrobić.
Cytat:Wyrazić to co czuję , zabrakło by tyle słów....
Odpowiedz
#3
Jeśli dobrze rozumuję to moje zapytanie o dodanie znajomego będzie się opierać na tabeli users, którego wynik będzie zapisany w tabeli znajomi?
Odpowiedz
#4
Nie można chyba powiedzieć że wynik będzie zapisany Wink Raczej wynik działania skryptu.
Pobierasz id użytkownika który jest zalogowany , id użytkownika którego zaprasza i zapisujesz do bazy. Jako status przykładowo podajesz domyślnie 2, zmiana jego będzie w przypadku gdy drugi użytkownik zaakceptuje np na wartość 1 a na wartość 0 gdy odrzuci.
Cytat:Wyrazić to co czuję , zabrakło by tyle słów....
Odpowiedz
#5
Czyli z tabeli users pobieram id użytkownika aktualnie zalogowanego oraz id użytkownika którego zapraszam a następnie zapisuję to do tabeli znajomi ze statusem oczekiwania, czy tak?

Wybacz te być może banalne pytania ale chciałbym dokładnie zrozumieć działanie tego systemu i napisać wszystko sam nie korzystając z gotowców
Odpowiedz
#6
dokładnie tak Wink Najprostszy i myślę optymalny sposób.
Cytat:Wyrazić to co czuję , zabrakło by tyle słów....
Odpowiedz
#7
Udało mi się napisać ten skrypt, ale przy wyświetlaniu znajomych pojawia mi się niechciana wartość jednej z kolumn. Mianowista wyświetla mi się:

[imie_znajomego] [status on- offline] [dostępny lub niedostępny]

Status dostępny lub niedostępny pobieram z wartości pola status.
Kod PHP:
$user=$_SESSION['login'];
//pobieram z sesji nazwe uzytkownika i zapisuje do zmiennej jego id
$user_id=mysql_query("SELECT * FROM users WHERE login='$user'");
while(
$show mysql_fetch_assoc($user_id)){
    
$id $show['id'];
}

echo 
"<ul>";
//pobieram id przypisane do zalogowanego uzytkownika
$znajomi mysql_query("SELECT * FROM znajomi WHERE id_user='$id' AND status='1'");
    while(
$online mysql_fetch_assoc($znajomi)){
        
$znajomy $online['id_znajomy'];
    

//poprzez id znajomego pobieram jego dane
$kontakty mysql_query("SELECT * FROM users WHERE id='$znajomy'");

    while(
$pokaz mysql_fetch_assoc($kontakty)){
        
$imie $pokaz['imie'];
        
$dostepny $pokaz['online'];
        if(
$dostepny == 1){
        echo 
"dostępny";
        }
        else echo 
"niedostępny";
        echo 
"<li>".$imie.$dostepny."</li>";
    
}
}
echo 
"</ul>"

Przykładowy wynik:
Marcin 1 dostępny
Monika 0 niedostępny
Odpowiedz
#8
Przecież dokładnie tak jak mówisz tak zaprogramowałeś chyba , że nie rozumiem o co Ci chodzi. tak przy okazji nie rób dodatkowych zmiennych $imie i $dostepny bo tylko pamiec zajmujesz.

Przecież chyba pobierać masz znajomych tylko np użytkownika Adam który ma id = 1, i np gdy tabela ma budowe
id , id_zalogowanego, id_znajomego , status ( przy czym zaakceptowanie to wartosc 1 )

Więc zapytanie wygląda
Kod PHP:
SELECT `users`.`loginFROM `znajomi`
LEFT JOIN `users
ON `znajomi`.`id_znajomego`= `users`.`id`
WHERE `znajomi`.`id_zalogowanego` = tutaj_zmienna_php AND `znajomi`.`status`=1 ORDER BY `znajomi`.`idDESC 

Mniej więcej tak zapytanie ma wyglądać, żeby pobrać znajomych użytkownika wraz z loginami.
Cytat:Wyrazić to co czuję , zabrakło by tyle słów....
Odpowiedz
#9
Chcę żeby mój wynik wyglądał następująco:
Marcin dostępny
Monika niedostępny


Nie wiem jak mam się pozbyć wartości 1 i 0 w wyniku
Odpowiedz
#10
(14-04-2012, 16:27)e-konrad napisał(a): Chcę żeby mój wynik wyglądał następująco:
Marcin dostępny
Monika niedostępny


Nie wiem jak mam się pozbyć wartości 1 i 0 w wyniku

to po co piszesz

echo $imie.$dostepny ? napisz tylko echo $imie; ..... widać już, że nie ty to pisałeś bo nawet nie wiesz jak zmodyfikować....

Cytat:Wyrazić to co czuję , zabrakło by tyle słów....
Odpowiedz


Podobne wątki…
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Jak sprawdzić czy adres www znajduje sie w bazie mysql? jarekcda 8 9,035 13-05-2017, 01:02
Ostatni post: miketodson255
  tworzenie pliku w katalogu głównym strony harvester2001 3 5,230 06-09-2013, 22:13
Ostatni post: Kartofelek
  Optymalizacja MySQL-a tomek_00 1 3,932 01-09-2013, 13:31
Ostatni post: hieroshima
  [MySQL] Struktura bazy dla słownika msx83 2 3,931 24-08-2013, 16:26
Ostatni post: msx83
  Komunikacja PHP z MySQL na serwerze pawstrze 5 6,457 16-07-2013, 15:58
Ostatni post: Engine

Skocz do:


Użytkownicy przeglądający ten wątek:
Sponsorzy i przyjaciele
SeoHost.pl