Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Problem z zapytaniem do bazy
Forum PHP.pl > Forum > Przedszkole
tinware
Witajcie.

Mam skrypt zliczający osoby, ktore pobraly dany plik oraz spis osob ktory ten plik pobraly.


  1. {
  2. $wynik2 = mysql_query ("SELECT * FROM Detective WHERE operacja='Pobieranie pliku' and id_operacji='$nr' and osoba='".$_SESSION['login']."' ORDER by nr DESC;");
  3. $i=0;
  4. $ile = mysql_num_rows($wynik2);
  5. echo "$ile razy ";
  6. }
  7. echo "(";
  8. /////////////////////////////////////////////////////
  9. $wynik3 = mysql_query ("SELECT * FROM Detective WHERE operacja='Pobieranie pliku' and id_operacji='$nr' ORDER by osoba DESC;");
  10. $i=0;
  11. $ile = mysql_num_rows($wynik3);
  12. while ($rekord2 = mysql_fetch_assoc ($wynik3))
  13. {
  14. $nr = $rekord2['nr'];
  15. $data = $rekord2['data'];
  16. $osoba = stripslashes( ($rekord2['osoba']));
  17.  
  18. echo "$osoba, ";
  19. }
  20. /////////////////////////////////////////////////
  21. echo ")";




1. W skrypcie zliczającym zlicza ilosc razy pobran pliku przez uzytkownika z SESJI, a chcialbym zeby zliczal pobrania wszystkich uzytkownikow OPROCZ uzytkownika z SESJI.


2. Uzytkownicy, ktorzy dany plik pobrali:
Kod
(qvasu, natala1411, karolina0401, djplate, djplate, djplate, Danius, dami620, )

Jeśli dany użytkownik pobierze wiecej niz jeden raz to powinno pokazac go ze pobral jeden raz a nie 3 w przypadku "djplate"





W jaki sposób poprawić te błędy?

Oto zmienne tabeli Detective: nr, data, osoba, operacja, id_operacji
wookieb
1)... !=
2) array_unique
tinware
Z pierwszym poradzilem sobie, ok smile.gif

Z drugim mam problem:


  1. $wynik3 = mysql_query ("SELECT * FROM Detective WHERE operacja='Pobieranie pliku' and id_operacji='$nr' ORDER by osoba DESC;");
  2. $i=0;
  3. $ile = mysql_num_rows($wynik3);
  4. while ($rekord2 = mysql_fetch_assoc ($wynik3))
  5. {
  6. $nr = $rekord2['nr'];
  7. $data = $rekord2['data'];
  8. $osoba = stripslashes( ($rekord2['osoba']));
  9.  
  10. echo (array_unique($osoba));
  11. }



Gdzie znajduje się mój błąd ?
Kod
Warning: array_unique() [function.array-unique]: The argument should be an array in
BaN
Trochę przekombinowane, ale może nie znasz odpowiednich funkcji bazy?
Rozumiem, że chcesz wyciągnąć ilość pobrań oraz nazwy tych użytkowników oddzielone przecinkami w kolejności malejącej. W Twoim wypadku przydatne są dwie funkcje grupujące COUNT(...) oraz GROUP_CONCAT(...)

Zapytanie z wykorzystaniem tych funkcji:
  1. SELECT COUNT(*), GROUP_CONCAT(DISTINCT osoba ORDER BY osoba DESC SEPARATOR ', ')
  2. FROM Detective
  3. WHERE operacja='Pobieranie pliku' AND id_operacji='{$nr}'

Formalnie powinno być jeszcze GROUP BY operacja,id_operacji, ale skoro to MySQL, to powyższe zapytanie powinno działać

Jeżeli bez aktualnie zalogowanego użytkownika, to dodajesz kolejny warunek:
AND osoba<>mysql_real_escape_string($_SESSION['login'])

Edit: poprawiłem link
tinware
  1. $pobrano = mysql_query "SELECT COUNT(*), GROUP_CONCAT(DISTINCT osoba ORDER BY osoba DESC SEPARATOR ', ') FROM Detective WHERE operacja='Pobieranie pliku' AND id_operacji='{$nr}' ";
  2. $ile = mysql_num_rows($pobrano);
  3. echo "$ile razy (";
  4.  
  5. while ($rekord = mysql_fetch_assoc ($pobrano))
  6. {
  7. $nr2 = $rekord['nr'];
  8. $osoba = stripslashes( ($rekord['osoba']));
  9.  
  10. echo "$osoba";
  11. }


Wyskakuje:
Kod
Parse error: syntax error, unexpected '"' in /virtual/d/j/djplate.pl/department.php on line 126
BaN
Brakuje nawiasów, mysql_query() jest funkcją
Nie wiem po co liczysz rekordy, po co przetwarzasz w pętli i po co stosujesz stripslashes()?
Dostaniesz tylko jeden rekord, a jeśli dopuszczasz wpisywanie do bazy jakiś dziwnych znaków, to raczej htmlspecialchars()
Przeczytałeś dokumentację tych funkcji?
  1. $result = mysql_query("SELECT COUNT(*) AS ile, GROUP_CONCAT(DISTINCT osoba ORDER BY osoba DESC SEPARATOR ', ') AS osoby
  2. FROM Detective
  3. WHERE operacja='Pobieranie pliku' AND id_operacji='{$nr}'");
  4. if ($result) {
  5. $row = mysql_fetch_assoc($result));
  6. echo $row['ile'];
  7. if (strlen($row['osoby']) > 0) {
  8. echo ' (' . htmlspecialchars($row['osoby']) . ')';
  9. }
  10. }
tinware
Nie znam jeszcze innych technik.
Zliczam z wszystkich rekordow z podaniem warunków zapytania i wyświetlam to w pętli, ale powtarzające się wartości zmiennej...
Dlatego zgłosiłem się z tym problemem do Was.

Twój skrypt:
Kod
    

Parse error: syntax error, unexpected ')' in /virtual/d/j/djplate.pl/department.php on line 5
BaN
usuń nawias zamykający w tym wierszu, czyli powinno być:
  1. $row = mysql_fetch_assoc($result);
wookieb
Wystarczy. Forum to nie parser, żeby takie śmieci sprawdzać.
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.