Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Pytanie w sprawie rozwiązania bazy danych dla znajomych, zaproszenia
lukaszk
post
Post #1





Grupa: Zarejestrowani
Postów: 159
Pomógł: 0
Dołączył: 21.12.2010

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


Witam, potrzebuję na swojej stronie czegoś takiego jak znajomi i nie wiem jak to rozwiązać

Coś jak na Nk użytkownik zaprasza innego i ten inny musi to potwierdzić
Czyli dwie kolumny z id i jedna ze statusem (i jeszcze pomocnicze)

id_user1 | id_user2 | status | ...
34 | 25 | oczekuje |


ja to widzę tak ale tych rekordów oby było sporo załóżmy że każdy użytkownik ma 300 znajomych * ilość użytkowników serwisu to może te rozwiązanie okaże się zbyt ciężkie dla wyświetlenia i wyniki będą się długo wyświetlały.
Go to the top of the page
+Quote Post
singollo
post
Post #2





Grupa: Zarejestrowani
Postów: 47
Pomógł: 1
Dołączył: 25.11.2003

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


Baza pociągnie spokojnie do -set tysięcy rekordów

  1. CREATE TABLE znajomi(
  2. userId1 INT,
  3. userId2 INT,
  4. accepted TINYINT(1),
  5. PRIMARY KEY(userId1, userId2),
  6. KEY(userId2, userId1));
  7.  
  8. -- Stworzenie zaproszenia:
  9. INSERT INTO znajomi(userId1, userId2, accepted) VALUES ($zapraszajacy, $zaproszony, 0);
  10. -- Lista zaproszen do zaakceptowania:
  11. SELECT * FROM znajomi WHERE userId2 = $mojId AND accepted = 0;
  12. -- Zaakceptowanie zaproszenia:
  13. UPDATE znajomi SET accepted = 1 WHERE userId1 = $zapraszajacy AND userId2=$mojId
  14. -- Lista znajomych:
  15. SELECT userId1 FROM znajomi WHERE userId2=$mojId AND accepted = 1 UNION SELECT userId2 FROM znajomi WHERE userId1 = $mojId AND accepted = 1;






Go to the top of the page
+Quote Post
lukaszk
post
Post #3





Grupa: Zarejestrowani
Postów: 159
Pomógł: 0
Dołączył: 21.12.2010

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


Dziękuję za rozwiązanie smile.gif Pozdrawiam

Witam, pojawiła się mała komplikacja.
Mam tabelę użytkownicy i znajomi
Znajomi przetrzymuję id zaproszenia i użytkowników (zaproszony i zapraszający)
tabela użytkownicy zawiera wszystkie detale użytkownika

Potrzebuję złączenia aby wyświetlić listę znajomych z detalami

zrobiłem to tak ale nie wyświetla poprawnie rekordów

  1. SELECT *
  2. FROM znajomi z1 JOIN uzytkownicy u2
  3. ON (u2.id_uzytkownik = z1.id_user_1 OR u2.id_uzytkownik = z1.id_user_2)
  4. WHERE z1.id_user_1='$id_user' OR z1.id_user_2='$id_user'

To zapytanie wyświetla obu użytkowników w liście znajomych czyli zapraszający i zaproszony a powinien być tylko jeden użytkownik bo obecnie ja jestem na swojej liście zaproszonych i to samo u drugiego użytkownika.
$id_user - przechowuje id zalogowanego użytkownika

dodam że zmienna $id przetrzymuję id użytkownika którego detale przeglądamy
Go to the top of the page
+Quote Post
jaslanin
post
Post #4





Grupa: Zarejestrowani
Postów: 511
Pomógł: 143
Dołączył: 13.03.2010
Skąd: Jasło

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


myślę że ten link Ci pomoże:

http://dba.stackexchange.com/questions/101...hip/10206#10206


--------------------
Good luck and happy PHP'ing
Go to the top of the page
+Quote Post
lukaszk
post
Post #5





Grupa: Zarejestrowani
Postów: 159
Pomógł: 0
Dołączył: 21.12.2010

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


Niestety nie moja baza nie jest profesjonalna i wygląda tak

  1. CREATE TABLE IF NOT EXISTS `znajomi` (
  2. `id_zaproszenia` int(11) NOT NULL auto_increment,
  3. `id_user_1` int(11) NOT NULL,
  4. `id_user_2` int(11) NOT NULL,
  5. `accepted` int(11) NOT NULL,
  6. `data` date NOT NULL,
  7. `data_czas` datetime NOT NULL,
  8. PRIMARY KEY (`id_zaproszenia`)
  9. )

  1. CREATE TABLE IF NOT EXISTS `uzytkownicy` (
  2. `id_uzytkownik` int(11) NOT NULL auto_increment,
  3. `nick` varchar(100) collate utf8_polish_ci NOT NULL,
  4. `pass` varchar(60) collate utf8_polish_ci NOT NULL,
  5. `email` varchar(90) collate utf8_polish_ci NOT NULL,
  6. `link_avatar` varchar(150) collate utf8_polish_ci default NULL,
  7. PRIMARY KEY (`id_uzytkownik`)
  8. )


Potrzebuję wyświetlić znajomych użytkownika wyświetlając dane z tabeli użytkownicy.
Czyli SELECT który wybiera rekordy gdzie w id_user_1 albo id_user_2 jestem ja i wyświetla te rekordy.
Dane które chcę wyświetlić znajdują się w tabeli uzytkownicy.

To proste ale zapytanie musi być poprawne a takiego nie mogę skleić więc proszę o pomoc.
Pozdrawiam

Proszę nie sugerować się zadeklarowanymi wartościami pół to zostanie zmienione

poradziłem sobie z poprzednim ale utkwiłem na jednym etapie
Tablica zawiera id_dodanego (może to być film, galeria, wydarzenie) i porównuję to z tabelą w tym przypadku filmy i wyświetla te wpisy których id są w tablicy.
Teraz mam jeszcze tabelę znajomi i jak przerobić to zapytanie aby wpisy były wyświetlane u zalogowanego użytkownika a także u znajomych osoby która dodała wpis.
Do momocy $id - id użytkownika przeglądanego, $id_isset_useer - id użytkownika zalogowanego.

  1. SELECT *
  2. FROM tablica a JOIN filmy b
  3. WHERE a.id_dodany=b.id_film ORDER BY id_film DESC

Proszę o pomoc
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 21.08.2025 - 17:17