Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zliczanie częstości występowania cyfry w bazie danych
Forum PHP.pl > Forum > PHP
soliniak
Witam,

Mam bazę danych która zawiera ok. 1000 rekordów, są to same cyfry w przedziale od 1-30.
W jaki sposób mogę sprawdzić ile razy która cyfra występuje?

Napisałem coś takiego:
  1. <?php
  2. error_reporting( E_ALL );
  3.  
  4. $l_1c = 1;
  5. $l_num = mysql_query("SELECT * FROM db");
  6.  
  7. while($row=mysql_fetch_row($l_num)){
  8.  
  9. $id = $row['0'];
  10. $l_1 = $row['1'];
  11. $l_2 = $row['2'];
  12. $l_3 = $row['3'];
  13.  
  14. if($l_1 == 1){
  15. $l_1c++;
  16. }
  17. }
  18.  
  19. echo $l_1c;
  20.  
  21.  
  22. ?>

I to myślę, że działa, chciałbym natomiast usprawnić, zautomatyzować cały proces, aby miał zasięg od 1 do 30 cyfry.
Tutaj tylko porównuję ile razy występuje cyfra 1.

Z góry dziękuję za wskazówki i pomoc.
Xelah
Cyfry są w przedziale 0 do 9. 30 to liczba a nie cyfra.
Kikla pytań:
1. Checsz wyszukać cyfry czy liczby?
2. Jaki typ mają dane w konkretnych kolumnach?
3. Chcesz wyszukiwać danych z tylko jednej kolumny czy z kilku?
markuz
  1. SELECT cyfra, COUNT(*) FROM cyfry GROUP BY cyfra
soliniak
Mam 3 kolumny l_1, l_2, l_3. W każdej wymieszane liczby od 1-30.
Typ danych to var_char (rozumiem, że o to chodzi?)
Chciałem z wszystkich kolumn podsumować częstotliwość występowania danej liczby (1-30).
Xelah
Czyli to co napisał markuz.

  1. SELECT `number`, SUM(`total`) FROM (
  2. SELECT `l_1` AS `number`, COUNT(*) AS `total` FROM `test` GROUP BY `l_1`
  3. UNION ALL
  4. SELECT `l_2` AS `number`, COUNT(*) AS `total` FROM `test` GROUP BY `l_2`
  5. UNION ALL
  6. SELECT `l_3` AS `number`, COUNT(*) AS `total` FROM `test` GROUP BY `l_3`
  7. ) AS `dev_table` GROUP BY `number`
soliniak
Zrobiłem tak:


  1. for($i=1; $i<31; $i++){
  2. $wynik=mysql_query ("SELECT *, SUM(`total`) FROM (
  3. (SELECT `l_2` AS `number`, COUNT(*) AS `total` FROM db WHERE l_2 = $i GROUP BY `l_2`)
  4. UNION ALL
  5. (SELECT `l_1` AS `number`, COUNT(*) AS `total` FROM db WHERE l_1 = $i GROUP BY `l_1`)
  6. UNION ALL
  7. (SELECT `l_3` AS `number`, COUNT(*) AS `total` FROM db WHERE l_3 = $i GROUP BY `l_3`)
  8. ) AS `dev_table` GROUP BY `number`");
  9. $wynik2=mysql_fetch_array($wynik);
  10. echo "<pre>";
  11. echo "$i rekordow jest: $wynik2[total]";
  12. echo "</pre>";
  13. }

Ale niestety nie sumuje mi zawartości kolumn, tylko zatrzymuje się na pierwszym select'cie i sumuje wartości pierwszej kolumny podanej w query...
Halp?
Kaze
  1. for($i=1; $i<31; $i++){
  2. $wynik=mysql_query ("SELECT SUM(`total`) FROM (
  3. (SELECT COUNT(*) AS `total` FROM `db` WHERE l_1 = $i )
  4. UNION ALL
  5. (SELECT COUNT(*) AS `total` FROM 'db' WHERE l_2 = $i )
  6. UNION ALL
  7. (SELECT COUNT(*) AS `total` FROM 'db' WHERE l_3 = $i )
  8. ) AS `dev_table`");
  9. $wynik2=mysql_fetch_array($wynik);
  10. echo "<pre>";
  11. echo "$i rekordow jest: $wynik2[0]";
  12. echo "</pre>";
  13. };

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.