Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Zapytanie do bazy danych
CzarnyGsm
post 21.07.2012, 15:37:00
Post #1





Grupa: Zarejestrowani
Postów: 84
Pomógł: 2
Dołączył: 16.04.2007

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


Witam serdecznie,

Zaprojektowałem bazę danych, która przetrzymuje dane z relacjami między użytkownikami.
Tabela: Friendship
Kolmuny: inviting_user_id , invited_user_id, status , sending_time, acceptance_time
Stowarzyłem zapytanie zwracające rekordy przyjaciół dla użytkownika XYZ, których sam osobiście zaprosił do grona przyjaciół i oni zaakcpetowali jego zaproszenie. Tylko bo kilku dnia olśniło mnie, że przecież przyjaciółmi użytkownika XYZ mogą być też osoby, które same zaprosiły XYZ.
Pytanie jest następujące w jaki sposób mogę dodać do mojego bieżącego zapytania(nie tworząc nowego), aby pobrało mi również przyjaciół, gdzie ja jestem invited_user_id ?
Moje aktualne zapytanie:
  1. SELECT
  2. `friendship`.*,
  3. `users`.`login`,
  4. `users`.`name`,
  5. `users`.`surname`,
  6. FROM `friendship`
  7. LEFT JOIN `users` ON friendship.invited_user_id = users.id
  8. WHERE (inviting_user_id = '3') AND (STATUS = 1)
  9. ORDER BY `users`.`surname` ASC


Z góry dziękuję za pomoc.

Pozdrawiam
Go to the top of the page
+Quote Post
sobol6803
post 21.07.2012, 16:10:10
Post #2





Grupa: Zarejestrowani
Postów: 115
Pomógł: 13
Dołączył: 19.06.2011
Skąd: Ruda Śląska

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


  1. SELECT
  2. `friendship`.*,
  3. `users`.`login`,
  4. `users`.`name`,
  5. `users`.`surname`,
  6. FROM `friendship`
  7. LEFT JOIN `users` ON friendship.invited_user_id = users.id
  8. WHERE inviting_user_id = '3' AND invited_user_id='3' AND (STATUS = 1)
  9. ORDER BY `users`.`surname` ASC


O to chodzi?


--------------------
  1. mysql_query("DROP DATABASE $_GET['dbname']");
Go to the top of the page
+Quote Post
CzarnyGsm
post 21.07.2012, 17:39:17
Post #3





Grupa: Zarejestrowani
Postów: 84
Pomógł: 2
Dołączył: 16.04.2007

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


Dzięki bardzo za odpowiedź i zainteresowanie tematem. Przy tym zapytaniu wiązanie jest identyczne jak u mnie friendship.invited_user_id = users.id,
także zwróci to samo. A do tego w where dałeś inviting_user_id = '3' AND invited_user_id='3' więc nic tam to zapytanie nie zwróci, gdyż nie ma takiej możliwości aby w bazie był rekord że osoba zapraszająca zaprasza samą siebie.
Masz może inny pomysł? Wydaje mi sie, że zapytanie z UNION (łączeniem tabel) rozwiązałoby ten problem.

  1. SELECT
  2. `friendship`.*,
  3. `users`.`login`,
  4. `users`.`name`,
  5. `users`.`surname`,
  6. FROM `friendship`
  7. LEFT JOIN `users` ON friendship.invited_user_id = users.id
  8. WHERE (inviting_user_id = '3') AND (STATUS = 1)
  9. ORDER BY `users`.`surname` ASC
  10. UNION
  11. SELECT
  12. `friendship`.*,
  13. `users`.`login`,
  14. `users`.`name`,
  15. `users`.`surname`,
  16. FROM `friendship`
  17. LEFT JOIN `users` ON friendship.inviting_user_id = users.id
  18. WHERE (invited_user_id = '3') AND (STATUS = 1)
  19. ORDER BY `users`.`surname` ASC

Ale czy nie da się tego zrobić w jednym zapytaniu bez union? Macie jakie pomysły? Z góry dziękuję za pomoc.
Go to the top of the page
+Quote Post
mmmmmmm
post 21.07.2012, 19:00:51
Post #4





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


  1. SELECT
  2. `friendship`.*,
  3. `users`.`login`,
  4. `users`.`name`,
  5. `users`.`surname`,
  6. FROM `friendship`
  7. LEFT JOIN `users` ON users.id IN (friendship.invited_user_id, friendship.inviting_user_id)
  8. WHERE (users.id = '3') AND (STATUS = 1)
  9. ORDER BY `users`.`surname` ASC


Ten post edytował mmmmmmm 21.07.2012, 19:01:45
Go to the top of the page
+Quote Post
CzarnyGsm
post 22.07.2012, 17:36:19
Post #5





Grupa: Zarejestrowani
Postów: 84
Pomógł: 2
Dołączył: 16.04.2007

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


Dzięki za pomoc. W ostateczności zapytanie wyszło takie (dzięki mmmmmmm za formułke z IN)
  1. SELECT
  2. `friendship`.*,
  3. `users`.`login`,
  4. `users`.`name`,
  5. `users`.`surname`,
  6. FROM `friendship`
  7. LEFT JOIN `users` ON users.id IN (friendship.invited_user_id, friendship.inviting_user_id)
  8. WHERE ( friendship.inviting_user_id = '$userID'
  9. OR
  10. friendship.invited_user_id = '$userID' )
  11. AND (STATUS =1)
  12. AND (users.id != '$userID')
  13. ORDER BY `users`.`login` ASC

i zapytanie elegancko zwraca dla zadanego $userId jego przyjaciół (tych, których zaprosił i potwierdzili znajomość jak również i tych, którzy go zaprosili i on potwierdził)
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 Wersja Lo-Fi Aktualny czas: 21.06.2025 - 05:32