Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [PHP][MySQL] Zliczanie rekordów
desavil
post 8.08.2009, 08:44:01
Post #1





Grupa: Zarejestrowani
Postów: 339
Pomógł: 3
Dołączył: 15.10.2008
Skąd: Internet

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


Witam, poszukuję skryptu na zliczanie rekordów. Chodzi mi o to, że mam tabele o nazwie "players", a w niej są kolumny. Jedna z kolumn nazywa się "online", domyślna wartość jej to 0. Gdy ktoś jest zalogowany to wartość z liczny 0 zmienia się na 1. Chodzi mi o to żeby skrypt zliczał te rekordy z liczbą 1. Pozdrawiam.


--------------------
"Nie ma głupich pytań, są tylko głupie odpowiedzi."
Pomogłem?? Kliknij "Pomógł" :) Dzięki!
Go to the top of the page
+Quote Post
Kuzry
post 8.08.2009, 08:51:01
Post #2





Grupa: Zarejestrowani
Postów: 28
Pomógł: 4
Dołączył: 30.05.2008

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


Musisz zmodyfikować zapytanie żeby pobierało liczbę rekordów:

Coś w tym stylu bo nie wiem jaką masz strukturę tabeli:
  1. SELECT count(online) FROM players WHERE online = 1;


Ten post edytował Kuzry 8.08.2009, 08:51:27
Go to the top of the page
+Quote Post
desavil
post 8.08.2009, 09:34:21
Post #3





Grupa: Zarejestrowani
Postów: 339
Pomógł: 3
Dołączył: 15.10.2008
Skąd: Internet

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


Proszę o pomoc co jest tutaj źle zamiast wyniku pokazuje mnie się biała strona, pusta.
  1. <?
  2. mysql_connect('127.0.0.1', 'XXX', 'XXX') or
  3. die (' Niepoprawne po??Ä?czenie z bazÄ? danych ');
  4. mysql_select_db('XXX') or die (' Z??a baza danych ');
  5.  
  6. $wynik = mysql_query ("SELECT count(online) FROM players WHERE online = 1");
  7.  
  8. while ($rekord = mysql_fetch_assoc($wynik)) {
  9. $online = $rekord['online'];
  10.  
  11. print "$online";
  12. }
  13. ?>


A gdy w bazie przez opcję "SQL" wywołam to:
  1. SELECT count(online) FROM players WHERE online = 1

To pokazuje poprawnie ilość rekordów zliczonych.

Ten post edytował desavil 8.08.2009, 09:38:19


--------------------
"Nie ma głupich pytań, są tylko głupie odpowiedzi."
Pomogłem?? Kliknij "Pomógł" :) Dzięki!
Go to the top of the page
+Quote Post
wookieb
post 8.08.2009, 09:39:56
Post #4





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




  1. $wynik =mysql_query("SELECT count(online) as ile FROM players WHERE online = 1");
  2. $wiersz=mysql_fetch_assoc($wynik);
  3. print_r($wiersz);


Ten post edytował wookieb 8.08.2009, 09:51:32


--------------------
Go to the top of the page
+Quote Post
desavil
post 8.08.2009, 09:48:47
Post #5





Grupa: Zarejestrowani
Postów: 339
Pomógł: 3
Dołączył: 15.10.2008
Skąd: Internet

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


Teraz to mi pisze takie coś:
Cytat
Array ( [count(online)] => 0 )


A ja chcę żeby pisała sama cyfra, a nie takie coś...


--------------------
"Nie ma głupich pytań, są tylko głupie odpowiedzi."
Pomogłem?? Kliknij "Pomógł" :) Dzięki!
Go to the top of the page
+Quote Post
wookieb
post 8.08.2009, 09:51:47
Post #6





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




A zobacz moje zapytanie


--------------------
Go to the top of the page
+Quote Post
desavil
post 8.08.2009, 09:53:03
Post #7





Grupa: Zarejestrowani
Postów: 339
Pomógł: 3
Dołączył: 15.10.2008
Skąd: Internet

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


Ma pisać sama cyfra a nie takie coś.

Z twoim takie coś jest:
Cytat
Array ( [ile] => 0 )


Ten post edytował desavil 8.08.2009, 09:54:24


--------------------
"Nie ma głupich pytań, są tylko głupie odpowiedzi."
Pomogłem?? Kliknij "Pomógł" :) Dzięki!
Go to the top of the page
+Quote Post
wookieb
post 8.08.2009, 09:55:19
Post #8





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




No to to sama cyfre wyciagnij.
  1. $wiersz['ile']

To az TAKI problem?

Ten post edytował wookieb 8.08.2009, 09:55:35


--------------------
Go to the top of the page
+Quote Post
TrevorGryffits
post 8.08.2009, 09:57:17
Post #9





Grupa: Zarejestrowani
Postów: 139
Pomógł: 24
Dołączył: 29.07.2007
Skąd: Tarnowskie Góry

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


To są podstawy... Dostęp do zmiennych tablicy.
Go to the top of the page
+Quote Post
desavil
post 8.08.2009, 09:57:31
Post #10





Grupa: Zarejestrowani
Postów: 339
Pomógł: 3
Dołączył: 15.10.2008
Skąd: Internet

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


Teraz to jest pusta strona i nic nie pisze...

Mój kod:
  1. <?
  2. mysql_connect('127.0.0.1', 'XXX', 'XXX') or
  3. die (' Niepoprawne po??Ä?czenie z bazÄ? danych ');
  4. mysql_select_db('XXX') or die (' Z??a baza danych ');
  5.  
  6. $wynik =mysql_query("SELECT count(online) as ile FROM players WHERE online = 1");
  7. $wiersz=mysql_fetch_assoc($wynik);
  8. $wiersz['ile']
  9. ?>


--------------------
"Nie ma głupich pytań, są tylko głupie odpowiedzi."
Pomogłem?? Kliknij "Pomógł" :) Dzięki!
Go to the top of the page
+Quote Post
wookieb
post 8.08.2009, 09:58:51
Post #11





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Tragedia. NIC NIE MYŚLISZ!
  1. echo $wiersz['ile'];

Podałem ci tylko jak się dobrać do tej wartości.
Włącz raportowanie błędów i w rekę jakiś kurs php bo nic nie umiesz.


--------------------
Go to the top of the page
+Quote Post
8_pasarzer_NOSTR...
post 28.05.2012, 12:33:49
Post #12





Grupa: Zarejestrowani
Postów: 109
Pomógł: 0
Dołączył: 5.11.2009

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


Podepnę się pod temat bo szkoda nowego zakładać.

Mam bazę danych z następującymi kolumnami :
id|miesiac|rok|1|2|3|4|5|6|7|8|9|10


Dla przykładu powiedzmy że baza danych ma tylko jeden wpis :
id = 1
miesiac = 06
rok = 2012
1 = 10
2 = 7
3 = W
4 = W
5 = 7
6 = 10
7 = 7
8 = W
9 = W
10 = W

Chciałbym zliczyć ile jest kolumn z wpisem "W" w polach od 1-10, i gdy miesiac=06 i rok=2012.

Chce otrzymać wynik = 5.

Jak to uczynić ?

Ten post edytował 8_pasarzer_NOSTROMO 28.05.2012, 12:35:10
Go to the top of the page
+Quote Post
8_pasazer_NOSTRO...
post 29.05.2012, 09:50:59
Post #13





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 18.11.2009
Skąd: Legnica

Ostrzeżenie: (20%)
X----


Co, nikt nie pomoże, czy aż tak trudne ? Choć słowo nakierujące ?
Go to the top of the page
+Quote Post
IProSoft
post 29.05.2012, 10:00:55
Post #14





Grupa: Zarejestrowani
Postów: 479
Pomógł: 97
Dołączył: 6.09.2011
Skąd: php.net :)

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


Podpowiedź
Kod
SELECT COUNT(id) AS ile FROM tabele WHERE  3='W' OR 4='W'

Nie wiem czy chcesz zliczać czy tylko w polu 3 jest W czy inaczej.

EDIT:
Nie doczytałem dokładnie, że ma być wynik 5 czyli zliczenie w komórkach, lepiej to wykonać w PHP - if z $i++

Ten post edytował IProSoft 29.05.2012, 10:02:39


--------------------
Manual prawdę Ci powie.
Go to the top of the page
+Quote Post
8_pasazer_NOSTRO...
post 29.05.2012, 10:44:51
Post #15





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 18.11.2009
Skąd: Legnica

Ostrzeżenie: (20%)
X----


Baza wyglada tak:
id|miesiac|rok|p1|p2|p3|p4|p5|p6|p7|p8|p9|p10

Ja to zrobiłem tak, ale muli strasznie gdy jest wiecej danych w bazie.

  1. for(x=1;$x<11;$x++)
  2. {
  3. SELECT p$i FROM tabela WHERE (p$i='W' && miesiac='05' && rok='2012')
  4. }
  5. $suma_ile=array_sum($ile);


Czy jest inna metoda by nie pętlować 10x. Bo mój sposób mieli wyniki około 30 sekund.

Ten post edytował 8_pasazer_NOSTROMO 29.05.2012, 10:51:00
Go to the top of the page
+Quote Post
czychacz
post 29.05.2012, 11:11:08
Post #16





Grupa: Zarejestrowani
Postów: 189
Pomógł: 13
Dołączył: 20.09.2008
Skąd: Lublin

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


może to nie jest perfekcyjne rozwiązanie, ale nie chce mi się myśleć.
spróbuj dodać indeksy dla pól miesiac, rok i wszystkich tych p-numerowanych, bo raczej indeksów tam chyba nie ma.
oczywiście na pewno jest jeszcze jakieś rozwiązanie, ale napiszę dopiero, gdy na nie wpadnę tongue.gif

//edit: indeksy INDEX najlepiej, bo raczej masz tam powtórzenia tongue.gif

//edit2: inną, bardziej oczywistą opcją, jest wysłanie tylko jednego zapytania, a później obrobienie wyniku w samym php. co nie wyklucza oczywiście użycia indeksów. wysyłasz zapytanie wybierające rekordy z określonej daty (miesiac, rok), pakujesz wszystko do tablicy dwuwymiarowej, przelatujesz pętlą, sprawdzając, czy podany rekord spełnia określone warunki.

Ten post edytował czychacz 29.05.2012, 11:24:59
Go to the top of the page
+Quote Post
8_pasazer_NOSTRO...
post 29.05.2012, 11:56:31
Post #17





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 18.11.2009
Skąd: Legnica

Ostrzeżenie: (20%)
X----


Dzięki za pomoc, ale chciałem zrobić to bez pętlowania, jeśli oczywiście się da. Pętlowanie wyników w tym wypadku bardzo spowolniają działanie całego skryptu. Jakby ktoś miał inne pomysły bardzo proszę.
Go to the top of the page
+Quote Post
IProSoft
post 29.05.2012, 12:39:41
Post #18





Grupa: Zarejestrowani
Postów: 479
Pomógł: 97
Dołączył: 6.09.2011
Skąd: php.net :)

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


Spowalnia bo źle kombinujesz.
Najpierw pobierasz cały wiersz, a następnie obrbiasz go w PHP, teraz 11 razy wykonujesz zapytanie, a wystarczy raz.
(polegając na pierwszym posicie, że masz jeden wiersz wypełniony.)

  1. $row = SELECT * FROM tabela WHERE miesiac='05' && rok='2012' LIMIT 1
  2. $i = 0;
  3. for($x=1;$x<11;$x++)
  4. {
  5. if($row['p'.$i] == 'W')
  6. {
  7. $i++;
  8. }
  9. }

a jeśli więcej
  1. $row = SELECT * FROM tabela WHERE miesiac='05' && rok='2012'
  2.  
  3. foreach($row as $s => $r){
  4.  
  5. for($x=1;$x<11;$x++)
  6. {
  7. if($r['p'.$i] == 'W')
  8. {
  9. $i++;
  10. }
  11. }
  12. }



--------------------
Manual prawdę Ci powie.
Go to the top of the page
+Quote Post
kefirek
post 29.05.2012, 15:29:40
Post #19





Grupa: Zarejestrowani
Postów: 781
Pomógł: 256
Dołączył: 29.06.2008

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


  1. $result = mysql_query("SELECT CHAR_LENGTH(CONCAT(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))-CHAR_LENGTH(REPLACE(CONCAT(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),'w','') AS num FROM tabela WHERE miesiac=06 AND rok=2012");


Ten post edytował kefirek 29.05.2012, 15:30:34
Go to the top of the page
+Quote Post
8_pasarzer_NOSTR...
post 30.05.2012, 06:33:32
Post #20





Grupa: Zarejestrowani
Postów: 109
Pomógł: 0
Dołączył: 5.11.2009

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


@ kefirek

Mam pytanko, czy mógłbyś mi wytłumaczyć mniej więcej co robi takie zapytanie. Chciałbym to zrozumieć a nie tylko przekopiować i wkleić.
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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 Wersja Lo-Fi Aktualny czas: 29.04.2025 - 09:54