Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Statystyka wyjazdów.
Forum PHP.pl > Forum > Przedszkole
kopek
Mam tabelę, w której są informacje na temat wyjazdów pracowników. Chciałbym stworzyć statystykę, która będzie wyświetlać kto ile miał wyjazdów (w rzeczywistości będzie to ilość rekordów w bazie danego pracownika). Zastanawiam się, czy da się to zrobić w jednym zapytaniu, czy muszę najpierw pobrać tą ilość od każdego pracownika i zapisać w jakiejś dodatkowej tabeli, a później odczytać tą tabelę sortując sobie po ilości? Proszę o komentarz, czy mój pomysł z dodatkową tabelą, zmierza w dobrym kierunku.
nospor
Wystarczy użyc grupowania.

GROUP BY oraz COUNT
Kshyhoo
Z 15 minut temu odpowiadałem na podobny temat (nie lubisz szukajek?). Może tak:
  1. SELECT rekord, count(rekord) AS ile
  2. FROM tabela
  3. GROUP BY rekord
  4. ORDER BY ile DESC
kopek
Spróbowałem coś takiego ale wyświetla mi bład:
Warning: mysql_fetch_array() expects parameter...
  1. connection();
  2. $sql = "SELECT nazwa, count(nazwa) AS ile FROM delegacja GROUB BY nazwa ORDER BY ile DESC";
  3. $query=mysql_query($sql);
  4. ?>
  5. <table>
  6. <tr>
  7. <td>
  8. Imię i nazwisko.
  9. </td>
  10. <td>
  11. Ilość wyjazdów.
  12. </td>
  13. </tr>
  14. <?
  15. while ($wynik=mysql_fetch_array($query)){
  16. ?>
  17. <tr>
  18. <td>
  19. <?echo $wynik['nazwa']?>
  20. </td>
  21. <td>
  22. <?echo $wynik['ile'];?>
  23. </td>
  24. </tr>
  25. </table>
  26. <?
  27. }
nospor
Bo masz blad zapytania.
Jak sobie radzic z bledami zapytania masz napisane tu:
Temat: Jak poprawnie zada pytanie
kopek
Miałem GROUB zamiast GROUP... taka literówka ale zastosowanie mysql_error() pomogło zlokalizować problem. :-)

Chciałem jeszcze zawęzić wyświetlanie poprzez podanie zakresu czasowego i kiedy dodałem na sztywno w zapytaniu:
  1. $sql = "SELECT nazwa, count(nazwa) AS ile FROM delegacja WHERE data_start BETWEEN '2012-02-01' AND '2012-02-10' GROUP BY nazwa ORDER BY ile DESC";

to działa i wyświetla poprawnie, ale kiedy zrobiłem tak:
  1. $sql = "SELECT nazwa, count(nazwa) AS ile FROM delegacja WHERE data_start BETWEEN 'data1' AND 'data2' GROUP BY nazwa ORDER BY ile DESC";

gdzie data1 i data2 są pobierane z formularza (poprawnie bo echo je wyświetla) to niestety żaden rekord się nie wyświewtla.
zaworek
Ja bym zmienił na

  1. $sql = "SELECT nazwa, count(nazwa) AS ile FROM delegacja WHERE data_start BETWEEN '$data1' AND '$data2' GROUP BY nazwa ORDER BY ile DESC";
nospor
Cytat
poprawnie bo echo je wyświetla
Tak?? To zrób sobie echo tego:
echo $sql;
tongue.gif

A na przyszłość czytaj uważnie linki, które dostajesz - bo tam to wszystko jest wyjaśnione
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.