Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQLite][SQL][MySQL]Zapytanie zliczajace sql
Forum PHP.pl > Forum > Przedszkole
kuba1ka
Chce zliczyc wszystkie logowania dla danego usera

robie cos takiego:
  1. SELECT wpl_users.* ,Count(wpl_logi.logi_users_id) AS PoliczOfuser FROM wpl_logi JOIN wpl_users ON wpl_logi.logi_users_id = wpl_users.users_id


tylko takie zapytanie zlicza mi dla jednego usera o id 1 /glownego admina chodz nie ma tu zadnego where czy cos? nie rozumiem


Moja struktura tabelek:
  1. CREATE TABLE IF NOT EXISTS `wpl_logi` (
  2. `logi_id` int(11) NOT NULL,
  3. `logi_users_id` int(11) NOT NULL,
  4. `logi_akcja` varchar(255) NOT NULL,
  5. `logi_stan` int(11) NOT NULL,
  6. `logi_data` datetime NOT NULL,
  7. `logi_ip` varchar(100) NOT NULL,
  8. `logi_host` varchar(100) NOT NULL,
  9. `logi_system` varchar(100) NOT NULL,
  10. `logi_przegladarka` varchar(100) NOT NULL
  11. ) ENGINE=InnoDB AUTO_INCREMENT=8010 DEFAULT CHARSET=latin1;
  12.  
  13. CREATE TABLE IF NOT EXISTS `wpl_users` (
  14. `users_id` int(11) NOT NULL,
  15. `users_login` varchar(50) CHARACTER SET latin1 NOT NULL,
  16. `users_haslo` text CHARACTER SET latin1 NOT NULL,
  17. `users_token` varchar(50) CHARACTER SET latin1 NOT NULL,
  18. `users_aktywny` int(11) NOT NULL,
  19. `users_online` int(11) NOT NULL,
  20. `users_rank` varchar(50) COLLATE utf8_polish_ci NOT NULL
  21. ) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;


Tabele te sa powiazane przez

logi_users_id = users_id

i teraz jak zliczyc wszystkie np . logi_akcja = logowanie (bo logow i tak jest cala masa) dla usera(nie konkretnego) bo chce to wyswietlac w pętli

zwykly :

  1. $query1 = "
  2. SELECT ".$prefix."logi.* ,".$prefix."users.*
  3. FROM ".$prefix."users
  4. JOIN ".$prefix."logi
  5. ON ".$prefix."logi.logi_users_id = ".$prefix."users.users_id
  6. ";


powoduje zwieszenie sie strony bo wyswietlaja sie wszystkie logi dla

chce zeby bylo np

login| ilosc logowan

zbyszek 20
janek 50
...

Jak powinno wygladac zapytanie?
Turson
Albo
  1. SELECT wpl_users.*
albo SELECT
  1. Count(wpl_logi.logi_users_id) AS PoliczOfuser

Połaczenie tych dwóch selectów powoduje problem. Albo wybierzesz opcję i zliczysz ile tego jest w PHP (uprzednio ewentualnie grupując w zapytaniu) albo skorzystasz z FOUND_ROWS()
Damonsson
Wystarczy dodać na końcu GROUP BY, żeby grupowało po ID usera. Ale wtedy w select musisz jeszcze dodać COUNT, żeby zliczyć ilość logowań dla tego konkretnego usera.

  1. SELECT COUNT(".$prefix."logi.logi_users_id), ".$prefix."logi.* ,".$prefix."users.*
  2. FROM ".$prefix."users
  3. JOIN ".$prefix."logi
  4. ON ".$prefix."logi.logi_users_id = ".$prefix."users.users_id
  5. GROUP BY ".$prefix."users.users_id
com
* to po prostu * nie potrzeba takiej magi tam robić smile.gif reszta jak powyżej smile.gif
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.