Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zliczanie rekordow - How to ?
Forum PHP.pl > Forum > Przedszkole
lunlog
Mam problem ze zformułowaniem kodu php który zliczy ilośc rekordów z bazy danych gdzie jakaś wartośc jest różna od zera i wyswietli jakieś konkretne dane...


Narazie mam cos takiego... ale nie wiem jak się zlicza rekordy.

  1. <?php
  2.  
  3. include 'admin.php';
  4.  
  5. $select="SELECT COUNT (*) FROM `tab_ast` WHERE `size` = 0 AND 'size' > 0";
  6. query($select);
  7.  
  8. if($row['size'] > 0) $ilosc1++;
  9. else $ilosc0++;
  10.  
  11.  
  12. $ilosc0=''; //ilosc rekordow gdzie 'size'=0
  13. $ilosc1=''; //ilosc rekordow gdzie 'size'>0
  14.  
  15.  
  16. echo "Ilosc zerowych to : $ilosc0 <br> Ilosc wiekszych to: $ilosc1";
  17.  
  18. ?>
  19.  


Jak widac na pozyzszym przykladzie w php ani w mysql nie wymiatam tongue.gif
LBO
  1. SELECT COUNT(*)
  2. FROM tab_ast
  3. WHERE size = 0 OR size > 0;
lunlog
Ok ok ale jak to wlać do php i później na stronę ?
kszychu
Cytat(LBO @ 2006-04-21 13:54:51)
  1. SELECT COUNT(*)
  2. FROM tab_ast
  3. WHERE size = 0 AND size > 0;

Że tak sięspytam: to po kiego grzyba ten cały WHERE? Jeśli założymy, że size jest nieujemne, wtedy warunek WHERE można pominąć.
Natomiast zliczanie zrealizuj po stronie php:
  1. <?php
  2.  
  3. if($row['size'] > 0) $ilosc1++;
  4. else $ilosc0++;
  5.  
  6. ?>
lunlog
'size' miesci sie w przedziale od 0 do 255... i zeczywiscie nie jest ujemne...

Ale chodzi o to zeby zliczyc np... wszystkie rekordy gdzie 'size' jest wieksze od 0 i takie gdzie rowna sie 0...
maverickkk
"Ok ok ale jak to wlać do php i później na stronę ?"

Normalnie. zamist twoich 2 zapytań stwórz 1 :

$select="SELECT COUNT(*) FROM tab_ast WHERE size = 0 OR size > 0";
query($select);
lunlog
ERROR: Something is wrong in your syntax obok '(*) FROM `tab_ast` WHERE `size` = 0 AND 'size' > 0' w linii 1

O.o
LBO
Cytat
wszystkie rekordy gdzie 'size' jest wieksze od 0 i takie gdzie rowna sie 0

chyba: lub takie?

Tworzysz dwa zapytania SELECT COUNT(*) z różnymi warunkami. By wyciagnąć wartość z tych zapytań musisz urzyć funkcji np. mysql_fetch_array()" title="Zobacz w manualu php" target="_manual. Podam przykład:
  1. <?php
  2.  
  3. $sql = 'SELECT COUNT(*) FROM tabela';
  4. $result = mysql_query($sql);
  5. $ile = mysql_fetch_array($result);
  6. echo 'Wynik liczenia to '.$ile[0];
  7.  
  8. ?>
lunlog
No to jedziemy...

  1.  
  2. <?php
  3.  
  4. include 'admin.php';
  5.  
  6.  
  7. {
  8. $select="SELECT COUNT (*) FROM `tab_ast` WHERE `size` = 0";
  9. $result = mysql_query($select);
  10. $ile0 = mysql_fetch_array($result);
  11.  
  12. echo 'Zerowki '.$ile0[0]. '<br>';
  13. }{
  14. $select2="SELECT COUNT (*) FROM `tab_ast` WHERE `size` > 0";
  15. $result = mysql_query($select2);
  16. $ile1 = mysql_fetch_array($result2);
  17.  
  18. echo 'Wiekksze od zera '.$ile1[0]. '<br>';
  19. }
  20.  
  21. ?>


cos takiego wywala mi bledy:


Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\FoxServ\www\5.php on line 9
Zerowki

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\FoxServ\www\5.php on line 15
Wiekksze od zera
LBO
Cytat
cos takiego ?

powiedzmy smile.gif

  1. <?php
  2.  
  3. //code
  4. //możesz nadpisać select
  5. $select="SELECT COUNT (*) FROM `tab_ast` WHERE `size` > 0";
  6. //uzywaj funckji mysql_query, a nie query
  7. //na górze masz podobny błąd
  8. $result = mysql_query($select);
  9. //wcześniej było mysql_fetch_array($result2), a nigdzie nie zdefiniowałeś $result2
  10. $ile1 = mysql_fetch_array($result);
  11. //code
  12.  
  13. ?>


Teraz powinno być dobrze. Mogłem coś przegapić, bo sie spieszę. Wychodzę już - powodzenia Życzę.

cheers!
lunlog
cały czas to nie jest to... znaczy sie nie działa biggrin.gif

wywala mi bledy w stylu ze supied argument is not ... oraz ze mam blad w składni..


//edit

znalazłem sobie opcję do zliczania w phpMyAdminie ale chciałbym wiedzieć jak właściwie to napisac żeby działało biggrin.gif

kod którego obecnie uzywam:

  1.  
  2. <?php
  3.  
  4. require_once 'admin.php';
  5.  
  6. $select="SELECT COUNT(*) FROM `tab_ast` WHERE `size` = 0 AND 'size' > 0";
  7. query($select);
  8.  
  9. if($row['size'] > 0) $ilosc1++;
  10. else $ilosc0++;
  11.  
  12.  
  13. echo "$ilosc0 <br>"; 
  14. echo "$ilosc1 <br><br>";
  15.  
  16.  
  17. ?>



Wyświetla mi: 1 i nic więcej.
LBO
Ja juz nie wiem czego potrzebujesz.
1. WHERE 'size' > 0 AND 'size' = 0. Dlaczego AND? Żadna liczba nie spełni warunku, by być jednocześnie zerem i od zera byc większa.
2. Tak jak napisał ~krzychu, WHERE 'size' > 0 OR 'size' = 0 jest nie potrzebne skoro 'size' miesci się w przedziale <0, 255>.
3. Z kodu powyżej i z tego co wałkowalismy, rozumiem, że query() to jakaś twoja funkcja, tak? Więc do jakiej zmiennej (mówimy nadal o twoim kodzie) zapisuje wynik zapytania? Gdzie używasz mysql_fetch_array" title="Zobacz w manualu php" target="_manual?
4. Czytasz poprzednie posty. Stosujesz się do rad? Miałeś już prawie dobry skrypt (kilka niestotnych błędów), a teraz znowu dajesz praktycznie ten sam co na początku.
lunlog
tak query to funkcja

  1. <?php
  2.  
  3.  
  4. function query($query)
  5. {
  6. $result = mysql_query("$query") or die("ERROR: ".mysql_error());
  7. return $result;
  8. }
  9.  
  10.  
  11. ?>



Ehh... motam się motam

  1.  
  2. <?php
  3.  
  4. include 'admin.php';
  5.  
  6. $select="SELECT COUNT(*) FROM `tab_ast` ";
  7. query($select);
  8. $ile = mysql_fetch_array($result);
  9.  
  10. echo 'Wynik '.$ile[0];
  11.  
  12. ?>


Wywala mi błąd:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\FoxServ\www\5.php on line 9
Wynik
matrach
$result jest zmienną lokalną funkcji więc jest niedostępna dalej.
Powinieneś przypisać wartość zwracaną przez funkcje do zmiennej.
  1. <?php
  2.  
  3. $result = query($select);
  4. $ile = mysql_fetch_array($result);
  5.  
  6. ?>
lunlog
No tak, istnieje możliwość zmienienia funkcji query tak aby zmienna $result była dostepna dalej ?

Skrypt działa... ale zlicza wszystkie rekordy a nie te w których wartośc pola 'size' jest większa od zera tongue.gif
matrach
Cytat(lunlog)
  No tak, istnieje możliwość zmienienia funkcji query tak aby zmienna $result była dostepna dalej?

dodaj linijke:
  1. <?php
  2. global $result;
  3. ?>

a wtedy możesz usunąć return().
Zapytanie:
  1. SELECT COUNT(*)
  2. FROM `tab_ast`
  3. WHERE size>0
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.