Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]System znajomości
Forum PHP.pl > Forum > Przedszkole
wolacinio
Witam serdecznie.
Mam pytanie jak rozwiać jeden problem z systemem znajomości ,teraz opisze problem:
Posiadam dwie tabele uzyt i znajomi

Użyt
ID|Imie
1|Piotr
2|Pawel
Znajomi

ID|ID_wysylajacego|ID_znajomego|Znajomy
1|1|2|tak

Wyszukuje w z bazy danych znajomych użytkownika o ID = 1
No to bedzie cos takiego
  1. SELECT T2.Imie
  2. FROM znajomi AS T1,uzyt AS T2
  3. WHERE T1.ID_wysylajacego = '1' AND T2.ID = T1.ID_znajomego AND T1.Znajomy = 'tak'

Możliwe ze sa błedy po pisałem "od ręki"

Wszystko działa lecz do czasu otoz to zapytanie zwróci Imie tego znajomego co mnie cieszy,lecz co by było jak by to uzytkownik 2 (Pawel) zaprosił uzytkownika 1(Piotr) ? w tedy nie wyswietli sie sad.gif
Ja miałem no to taki sposób ze tworze dwa zapytania jedno to to powyzej a drugie to wyszukuje znowu w ID_znajomego ID = 3 a ID_wysyłajacego przypisuje to drugiej tabeli
Chodzi to ale ja bym chciał to za pomocą jednego zapytania zrobić ? a moze wogole inaczej zaprojektować baze ?
Nie prosze o zrobienie tego za mnie lecz jakas wskazówkę,podpowiedź winksmiley.jpg byłbym bardzo bardzo wdzięczny winksmiley.jpg

Pozdrawiam Paweł
smietek
  1. WHERE ((T1.ID_wysylajacego = '1' AND T2.ID = T1.ID_znajomego) OR (T1.ID_wysylajacego = T1.ID_znajomego AND T2.ID = '1')) AND T1.Znajomy = 'tak'

Najlepiej byłoby, gdybym wiedział jak to ma wyglądać w praktyce, bo nie mam pewności, czy powyższy kod zadziała.
wolacinio
tzn. co chcesz wiedziec ? moge ci pokazac nawet strone jaka robie,pokazac pulpit wiec mozecie prosic o wszystko
Ma to polegac na tym ze uzytkownik od ID 1 wysyła zaproszenie uzytkwonikowi o ID 2 ,a ten uzytkownik(2) akceptuje badź odrzuca
smietek
A co ma robić to konkretne zapytanie?
Pobrać wszystkie zaproszenia jakie zostały wysłane, czy może pobrać wszystkich twoich znajomych (twoich = dla konkretnego ID)?
wolacinio
Ma ta wyświetlic wszystkich uzytkowników uzytkownika o ID = 1(Piotr)
blahy
wg mnie najlatwiej to zrobic tak:
1 tabela: user, pola id, imie
2 tabela znajmosci, pola: user_id, znajomy_id, zaakceptowany , gdzie user_id to id uzytkownika, ktory prosi o zawarcie znajmosci, a znajomy_id to id usera ktorego chce zaprosic.
W momencie gdy uzytkownik o id 1 (nazwijmy go Tomek) chce zawrzec znajomosc z uzytkownikiem o id 2 (Franek) to do tabeli znajmosci dodawany jest wpis 1,2,0. W tym momencie Tomek nie ma Franka jako znajomego (zaakceptowany = 0) ale Franek bedzie widzial, ze Tomek go zaprosil. Teraz Franek moze zaakceptowac zaproszenie. Gdy je zaakceptuje poprzedni wpis w tabeli znajomosci zmieni sie na 1,2,1 (zaakceptowano znajomosc. Tylko, ze jest to dzialanie jednostronne. W tabeli znajomosci informujemy ktory uzytkownik jest znajomym ktorego. Nie ma sensu bawic sie w podwojne zapytania. Wydaje mi sie ze lepiej zrobic tak: gdy Franek akceptuje znajomosc zmienic wpis utworzony przez Tomka tak jak napisalem wczesniej ORAZ dodac nowy wpis do tabeli znajomosci o tresci 2,1,1 (Franek bedzie znajomym Tomka - wpis aktywny). Teraz sa swoimi znajomymi. Wyszukujac wszystkie znajomy_id uzytkownika o danym user_id (np 1 dla Tomka) znajdziemy wszystkich jego znajomych, tak samo dla Franka (id 2) zostanie znaleziony uzytkownik o id 1. Trzeba tylko pamietac o aktualizacji tabeli w razie zerwania kontaktu, albo odrzuceniu akceptacji (dodatkowe pole) ale to juz dodatki
sebekzosw
a ja już takie coś robiłem i proponuje w tabeli znajomosci:
id rekordu, user1, user2, status, [data] i zrobić tak, że zapraszający zawsze się zapisuje na user1
I wtedy wszystko jasne... Jeżeli chcesz wyświetlić wszystkie zaproszenia do usera 2 to zapytanie:
  1. SELECT * FROM `znajomosci` WHERE `status`='0' AND `user2` = 5;


Znajomi usera 1:
  1. SELECT * FROM `znajomosci` WHERE `status`='1' AND (`user1`= 1 OR `user2` = 1);


Zaproszenia wysłane przez usera1 niezaakceptowane:
  1. SELECT * FROM `znajomosci` WHERE `status`='0' AND `user1` = 1;


Zaproszenia wysłane przez usera1 zaakceptowane:
  1. SELECT * FROM `znajomosci` WHERE `status`='1' AND `user1` = 1;


i tak można kombinować smile.gif
wolacinio
sebekzosw to ja o tym wiem ale jak połaczyć oby dwie tabele? i jak wyciagnac Imie,bo to co mi wysłałeś jest dobre lecz wyszukuje wszystkie kolumny


Bo robie tak:

SELECT Imie
FROM uzyt
WHERE ID = (SELECT (tutaj nie wiem czy według Zapraszajacego czy akceptowanego) FROM `znajomosci` WHERE `status`='1' AND (`user1`= 1 OR `user2` = 1))

blahywpadłem na pomysł jak to rozwiazac

Robiłem również w taki sposób:

  1. SELECT Imie
  2. FROM uzytkownicy
  3. WHERE ID
  4. IN (
  5. (
  6.  
  7. SELECT `Do`
  8. FROM `znajomi`
  9. WHERE `Znajomy` = 'tak'
  10. AND `Od` = '3'
  11. ), (
  12.  
  13. SELECT `Od`
  14. FROM `znajomi`
  15. WHERE `Znajomy` = 'tak'
  16. AND `Do` = '3'
  17. )
  18. )

ale gdy jak było wiecej wyników to sie sypneło bo wybierało cos takiego

SELECT Imie
FROM uzytkownicy
WHERE ID IN ((3),(12))
a powinno IN ((3),(1,2))

brakuje przecinka sad.gif i nie wiem jak to zrobic


Chyba zrobie tak że uzytkownik ID = 1 wysle do ID = 2 a ten (2) zaakceptuje to tworzy sie dwa wpisy

ID|ID_zapra|ID_znaj|
1|1|2
2|2|1

Macie inny sposob moze jeszcze?
________________________________________________________________________________
_______________________________________
Problem rozwiazany smile.gif

Zrobiłem tak

  1. SELECT Imie
  2. FROM uzytkownicy
  3. WHERE ID
  4. IN (
  5. (
  6.  
  7. SELECT `Do`
  8. FROM `znajomi`
  9. WHERE `Znajomy` = 'tak'
  10. AND `Od` = '3'
  11. UNION
  12. SELECT `Od`
  13. FROM `znajomi`
  14. WHERE `Znajomy` = 'tak'
  15. AND `Do` = '3'
  16. )
  17. )


Dziękuje wszystkim za pomoc smile.gif oczywiscie "Pomógł" bedzie winksmiley.jpg
Pozdrawiam
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.