Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MYSQL/PHP] Nie wydajne zapytanie ?
Forum PHP.pl > Forum > Przedszkole
b4x
  1. <?php
  2. function check_uonline($id) {
  3.  
  4. $p = mysql_fetch_array(mysql_query('SELECT `online` FROM `users` WHERE `id` = "'.$id.'"'));
  5.  
  6. return $p['online'];
  7.  
  8. }
  9.  
  10. function friends_online($user) {
  11.  
  12. $u = mysql_query('SELECT `friend` FROM `friends` WHERE `user_id` = "'.$user.'" AND `status` = "1"');
  13.  
  14.  while($row = mysql_fetch_assoc($u)) {
  15.  
  16. if($this->check_uonline($row['friend']) >= 1) {
  17.  
  18. $i++;
  19.  
  20. }
  21.  
  22. }
  23.  
  24. return $i;
  25.  
  26. }
  27.  
  28. function count_stats_users($user) {
  29.  
  30. $online = mysql_num_rows(mysql_query('SELECT `id` FROM `users` WHERE `online` > "0"'));
  31. $total = mysql_num_rows(mysql_query('SELECT `id` FROM `users`'));
  32. $friends_to_accept = mysql_num_rows(mysql_query('SELECT * FROM `friends` WHERE `user_id` = "'.$user.'" AND `inviter` = "0" AND `status` = "0"'));
  33. $messages = mysql_num_rows(mysql_query('SELECT `id` FROM `messages` WHERE `to` = "'.$user.'"'));
  34. $new_messages = $this->msgs_count($user);
  35.  
  36.  
  37. $array = array('online' => $online, 'total' => $total, 'friends_accept' => $friends_to_accept, 'friends_online' => $this->friends_online($user), 'messages' => $messages, 'new_messages' => $new_messages);
  38.  
  39. return $array;
  40.  
  41. }
  42. ?>


Nie wiem, jak zrobić, by było to bardziej wydajniejsze.. Ktoś pomoże ?
Kicok
Pierwsze dwie funkcje: mysql.com -> documentation -> LEFT JOIN
Ostatnia funkcja: mysql.com -> documentation -> COUNT
b4x
  1. <?php
  2. $q = mysql_query('SELECT login FROM friends LEFT JOIN users ON (users.online = 1) WHERE friends.friend = '.$user.'') or die(mysql_error());
  3. ?>


Prawie dobrze... tylko że zwraca mi podwójnie wyniki

Tzn

Kod
Array
(
    [0] => login1
)
Array
(
    [0] => login2
)
Array
(
    [0] => login1
)
Array
(
    [0] => login2
)



Edit

  1. <?php
  2. $q = mysql_query('SELECT distinct login FROM friends LEFT JOIN users ON (users.online = 1) WHERE friends.friend = '.$user.'') or die(mysql_error());
  3. ?>


- tak działa poprawnie... ale czy zapytanie jest poprawne ?
Kicok
Myślałem raczej o czymś takim:
  1. SELECT f.friend, u.login FROM friends f
  2. JOIN users u ON ( u.id = f.friend )
  3. WHERE f.user_id = $user AND f.STATUS = 1 AND u.online = 1

Zwróć szczególną uwagę na linijkę w JOIN - ty w swoim zapytaniu w ogóle nie określiłeś jaka jest relacja między tymi tabelami, więc nie wiem czy zwracało poprawne wyniki.
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.