Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SQLite][SQL][MySQL]Zapytanie zliczajace sql
kuba1ka
post
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 23.03.2015

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


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?
Go to the top of the page
+Quote Post
Turson
post
Post #2





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


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()
Go to the top of the page
+Quote Post
Damonsson
post
Post #3





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

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


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
Go to the top of the page
+Quote Post
com
post
Post #4





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


* to po prostu * nie potrzeba takiej magi tam robić smile.gif reszta jak powyżej smile.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 07:39