Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Closed TopicStart new topic
> [PHP][MySQL]Problem z zapytaniem do bazy
tinware
post
Post #1





Grupa: Zarejestrowani
Postów: 83
Pomógł: 0
Dołączył: 23.08.2009
Skąd: Wołomin

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


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

Ten post edytował tinware 26.04.2011, 22:17:51
Go to the top of the page
+Quote Post
wookieb
post
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




1)... !=
2) array_unique


--------------------
Go to the top of the page
+Quote Post
tinware
post
Post #3





Grupa: Zarejestrowani
Postów: 83
Pomógł: 0
Dołączył: 23.08.2009
Skąd: Wołomin

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


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


Ten post edytował tinware 27.04.2011, 21:47:28
Go to the top of the page
+Quote Post
BaN
post
Post #4





Grupa: Zarejestrowani
Postów: 158
Pomógł: 43
Dołączył: 9.11.2007

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


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

Ten post edytował BaN 27.04.2011, 23:13:40
Go to the top of the page
+Quote Post
tinware
post
Post #5





Grupa: Zarejestrowani
Postów: 83
Pomógł: 0
Dołączył: 23.08.2009
Skąd: Wołomin

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


  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


Ten post edytował tinware 28.04.2011, 13:17:09
Go to the top of the page
+Quote Post
BaN
post
Post #6





Grupa: Zarejestrowani
Postów: 158
Pomógł: 43
Dołączył: 9.11.2007

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


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





Grupa: Zarejestrowani
Postów: 83
Pomógł: 0
Dołączył: 23.08.2009
Skąd: Wołomin

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


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


Ten post edytował tinware 28.04.2011, 15:38:27
Go to the top of the page
+Quote Post
BaN
post
Post #8





Grupa: Zarejestrowani
Postów: 158
Pomógł: 43
Dołączył: 9.11.2007

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


usuń nawias zamykający w tym wierszu, czyli powinno być:
  1. $row = mysql_fetch_assoc($result);
Go to the top of the page
+Quote Post
wookieb
post
Post #9





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Wystarczy. Forum to nie parser, żeby takie śmieci sprawdzać.


--------------------
Go to the top of the page
+Quote Post

Closed TopicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 10:44