Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]System znajomości, Problem i pytanie z systemem znajomości
wolacinio
post
Post #1





Grupa: Zarejestrowani
Postów: 85
Pomógł: 1
Dołączył: 2.06.2009

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


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 (IMG:style_emoticons/default/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ź (IMG:style_emoticons/default/winksmiley.jpg) byłbym bardzo bardzo wdzięczny (IMG:style_emoticons/default/winksmiley.jpg)

Pozdrawiam Paweł

Ten post edytował wolacinio 24.09.2010, 19:22:09
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
smietek
post
Post #2





Grupa: Zarejestrowani
Postów: 306
Pomógł: 32
Dołączył: 20.01.2008

Ostrzeżenie: (20%)
X----


  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.
Go to the top of the page
+Quote Post
wolacinio
post
Post #3





Grupa: Zarejestrowani
Postów: 85
Pomógł: 1
Dołączył: 2.06.2009

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


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
Go to the top of the page
+Quote Post
smietek
post
Post #4





Grupa: Zarejestrowani
Postów: 306
Pomógł: 32
Dołączył: 20.01.2008

Ostrzeżenie: (20%)
X----


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)?
Go to the top of the page
+Quote Post
wolacinio
post
Post #5





Grupa: Zarejestrowani
Postów: 85
Pomógł: 1
Dołączył: 2.06.2009

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


Ma ta wyświetlic wszystkich uzytkowników uzytkownika o ID = 1(Piotr)
Go to the top of the page
+Quote Post
blahy
post
Post #6





Grupa: Zarejestrowani
Postów: 82
Pomógł: 22
Dołączył: 20.07.2010

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


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
Go to the top of the page
+Quote Post
sebekzosw
post
Post #7





Grupa: Zarejestrowani
Postów: 437
Pomógł: 42
Dołączył: 16.04.2007

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


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ć (IMG:style_emoticons/default/smile.gif)

Ten post edytował sebekzosw 25.09.2010, 01:52:30
Go to the top of the page
+Quote Post
wolacinio
post
Post #8





Grupa: Zarejestrowani
Postów: 85
Pomógł: 1
Dołączył: 2.06.2009

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


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 (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/smile.gif) oczywiscie "Pomógł" bedzie (IMG:style_emoticons/default/winksmiley.jpg)
Pozdrawiam

Ten post edytował wolacinio 25.09.2010, 09:04:04
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.08.2025 - 17:54