Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]statystyki z bazy
Forum PHP.pl > Forum > Przedszkole
musiek86
Chce pobrać z bazy mysql łączną liczbę wystąpien konkretnej tabeli, tzn mam baze np. jakas_baza w niej instalowany jest wielokrotnie skrypt forum a kazdy o innym prefixie ale takim samym początku i koncu wiec mamy np forum_prefix1_komentarze forum_prefix2_komentarze itd teraz pytanie jak z całej bazy wyliczyć i wyświetlic liczbe wystąpien takiej tabeli? Jest mo to potrzebne do wyświetlenia ilosci zainstalowanych for.

EDIT:
Mam tez w bazie tabele z zamowieniami gdzie mam kolumne 'id' do całej kolumny trafiaja wszystkie zamowienia, łatwiej by było z niej pobierac najwieksza ID ale obecnie podczas prób i testów mam jedno zgloszenie testowe o id = 55 juz mozna to jakos wyzerowac? by nalczało od 0?
tolomei
Witaj.

Spróbuj coś takiego:

  1. SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE 'forum_prefix%_komentarze'


Pozdrawiam.
musiek86
Moze głupie pytanie ale co zamiast TABLE_NAME mam wpisac ? ;>
Mam tak:

  1. <?php
  2. //Parametry bazy i serwera
  3. $ip = 'localhost';
  4. $nazwa_bazy = 'XXX';
  5. $login = 'YYY';
  6. $pass = 'ZZZ';
  7.  
  8. //Ustanawiamy połączenie z serwerem mysql
  9. if ( !mysql_connect($ip, $login, $pass) ) {
  10. echo 'Nie moge polaczyc sie z baza danych';
  11. exit (0);
  12. }
  13. //Wybieramy baze danych
  14. if ( !mysql_select_db($nazwa_bazy) ) {
  15. echo 'Blad otwarcia bazy danych';
  16. exit (0);
  17. }
  18. //Zapytanie do bazy celem pobrania danych z odpowiednich komórek
  19. $zapytanie = mysql_query("SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE 'forum_%_komentarze'")
  20. ;
  21.  
  22.  
  23. //wyświetlamy wyniki, sprawdzamy, czy zapytanie zwróciło wartość większą od 0
  24. if(mysql_num_rows($zapytanie) > 0) {
  25. /* jeżeli $zapytanie jest pozytywne, to wyświetlamy dane */
  26.  
  27. while($r = mysql_fetch_assoc($zapytanie)) {
  28.  
  29.  
  30. echo "$zapytanie";
  31. } }
  32. ?>


Wynikiem jest:
  1. Resource id #198
tolomei
Aby tabela wstawiała rekordy zaczynając od 1 należy użyć:

  1. ALTER TABLE `nazwa_tabeli` AUTO_INCREMENT =1


Pozdro.

  1. <?php
  2. //Parametry bazy i serwera
  3. $ip = 'localhost';
  4. $nazwa_bazy = 'XXX';
  5. $login = 'YYY';
  6. $pass = 'ZZZ';
  7.  
  8. //Ustanawiamy połączenie z serwerem mysql
  9. if ( !mysql_connect($ip, $login, $pass) ) {
  10. echo 'Nie moge polaczyc sie z baza danych';
  11. exit (0);
  12. }
  13. //Wybieramy baze danych
  14. if ( !mysql_select_db($nazwa_bazy) ) {
  15. echo 'Blad otwarcia bazy danych';
  16. exit (0);
  17. }
  18. //Zapytanie do bazy celem pobrania danych z odpowiednich komórek
  19. $zapytanie = mysql_query("SELECT COUNT(*) ilosc FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE 'forum_%_komentarze'")
  20. ;
  21.  
  22.  
  23. //wyświetlamy wyniki, sprawdzamy, czy zapytanie zwróciło wartość większą od 0
  24. if(mysql_num_rows($zapytanie) > 0) {
  25. /* jeżeli $zapytanie jest pozytywne, to wyświetlamy dane */
  26. $liczba = mysql_fetch_assoc($zapytanie);
  27. echo 'Ilość zainstalowanych forów to: '.$liczba['ilosc'];
  28.  
  29. }
musiek86
Wynikiem jest liczba: 10 a ja mam tylko jedno zainstalowane, czy problemem tu nie jest to ze mam tez inne bazy? bo to moj prywatny serwer. Nie dało by sie zamienic INFORMATION_SCHEMA.TABLES na nazwe konkretnej bazy?

EDIT:
Dobra zmieniłem nazwe tabeli na inna i wyświetla mi odpowiednio 1 szt co mnie cieszy, ale mam inne pytanie.
Baza na której pracuje to powiedzmy jakas_baza_1 a jak załoze sobie jeszcze jedna baze np musiek i tam zainstaluje sobie ten sam skrypt fora to w efekcie dostane ze mam juz 2 fora tak? Mimo ze kazde jest w innej bazie?
Potrzebuje by ten skrypt pobierał mi dane tylko i wyłacznie z tej jednej bazy (jakas_baza)
tolomei
Spróbuj tak w takim razie:

  1. SELECT COUNT(*) ilosc FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE 'forum_%_komentarze' AND TABLE_SCHEMA = 'nazwa_twojej_bazy'
musiek86
N oświetnie, działa i miejmy nadzieje ze sie z czasem nie sypnie smile.gif
Pomógł.

EDIT:
A tak sie zastanawiam jeszcze...
w bazie jest tabela (przykładowo) forum_prefix1_users a niej interesująca mnie kolumna user_id, jej najwieksza wartosc wskazuje liczbe uzytkowników tego danego forum. Powiedzmy że:
Dla forum AAA w tabeli forum_prefix1_user maksymalna wartosc user_id wynosi 6
Dla forum BBB w tabeli forum_prefix2_user maksymalna wartosc user_id wynosi 72
itd...

Jeśli nazwa tabeli jest jasno określona to każdą wartość otrzymam za pomoca zapytania
  1. SELECT max(user_id) FROM forum_prefix1_users LIMIT 1

natomiast jesli jako nazwe tabeli podam forum_%_users to wywala juz błąd wiec taka metoda odpada... jak to poskładac? Na mysl przychodzi mi nastepujace rozwiazanie, moze chaotycznie to przedstawie bo po nocce z pracy wróciłem ale w głowie układa mi sie to mniej wiecej tak:
Kazda osoba zakładająca forum podaje jego nazwe, nazwa zostaje zapisana w bazie danych wiec mozna by było złozyc nieco skomplikowany kod ktory wypisywał by kilka zapytan w zaleznosci od ilosci załozonych for.
Pobrac zawartosc nazw z kolumny do tablicy array i za jej pomoca wyswietlic zapytania
cos jak :
  1. SELECT max(user_id) FROM forum_.array[1]._users LIMIT 1
dac to w jakas petle, przypisac kazde zapytanie do jakiejs zmiennej a nastepnie wykonac zapytania sumując je.
Nie wiem czy to ktos zrozumie, mam nadzieje ze tak ;p
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.