Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Liczenie z zakresu dat.
Forum PHP.pl > Forum > Przedszkole
woxala123
Witam.
Skleiłem sobie taki kod aby zliczał ile dana liczba pojawiła się w bazie danych. I chcę też tak zrobić by zaznaczając 2 daty tylko z tego okresu policzył ilość wystąpień.
Tylko jak robie to takim zapytaniem to cały czas zlicza wszystkie rekordy. Nie wiem jak to ugryżć. Zauważyłem że zlicza tylko ostatnią kolumnę. Czyli musiałbym każdy dodatkowy warunek
AND tah1.datum IN('$a','$b') dodawać do każdej kolumny czy idzie to krócej zrobić jakby dodatkowym selectem.
Oto kod
  1. a = date($_POST['from']);
  2.  
  3. $b = date($_POST['to']);
  4.  
  5. $servername = "localhost";
  6. $username = "xxxt";
  7. $password = "xxx";
  8. $database = "xxx";
  9.  
  10. // Create connection
  11. $conn = new mysqli($servername, $username, $password, $database);
  12.  
  13. // Check connection
  14. if ($conn->connect_error) {
  15. die("Connection failed: " . $conn->connect_error);
  16. }
  17. echo "Connected successfully<br><br>";
  18.  
  19. $sum = 0;
  20. for ($i = 1; $i < 81; $i++) {
  21.  
  22.  
  23. $sql1 = " SELECT COUNT(id) AS pocet FROM `tah1` WHERE cislo1=$i OR cislo2=$i OR cislo3=$i OR cislo4=$i OR cislo5=$i OR cislo6=$i OR cislo7=$i OR cislo8=$i OR cislo9=$i OR cislo10=$i OR cislo11=$i OR cislo12=$i OR cislo13=$i OR cislo14=$i OR cislo15=$i OR cislo16=$i OR cislo17=$i OR cislo18=$i OR cislo19=$i OR cislo20=$i AND tah1.datum IN('$a','$b') ";
  24. var_dump($sql1);
  25. $result1 = $conn->query($sql1);
  26.  
  27. if ($result1->num_rows > 0) {
  28. // output data of each row
  29. $x = 1;
  30.  
  31. while (($row = $result1->fetch_assoc())) {
  32.  
  33. $tah1 = $row["pocet"];
  34.  
  35. $sum += $tah1;
  36.  
  37.  
  38.  
  39. echo " id " . $i . "<br>";
  40. echo " Liczbę " . $i . " Wylosowano razy " . ($tah1) . "<br>";
  41.  
  42. }
  43. }
  44.  
  45. }

Pozdrawiam

Zrobiłem takie zapytanie i okey pokazuje ilość wystąpień liczb w zakresie dat ale czy mozna to ukrócić?
  1. $sql1 = " SELECT COUNT(id) AS pocet FROM `tah1` WHERE cislo1=$i AND tah1.datum BETWEEN '$a' and '$b' OR cislo2=$i AND tah1.datum BETWEEN '$a' and '$b' OR cislo3=$i AND tah1.datum BETWEEN '$a' and '$b' OR cislo4=$i AND tah1.datum BETWEEN '$a' and '$b' OR cislo5=$i AND tah1.datum BETWEEN '$a' and '$b' OR cislo6=$i AND tah1.datum BETWEEN '$a' and '$b' OR cislo7=$i AND tah1.datum BETWEEN '$a' and '$b' OR cislo8=$i AND tah1.datum BETWEEN '$a' and '$b' OR cislo9=$i AND tah1.datum BETWEEN '$a' and '$b' OR cislo10=$i AND tah1.datum BETWEEN '$a' and '$b' OR cislo11=$i AND tah1.datum BETWEEN '$a' and '$b' OR cislo12=$i AND tah1.datum BETWEEN '$a' and '$b' OR cislo13=$i AND tah1.datum BETWEEN '$a' and '$b' OR cislo14=$i AND tah1.datum BETWEEN '$a' and '$b' OR cislo15=$i AND tah1.datum BETWEEN '$a' and '$b' OR cislo16=$i AND tah1.datum BETWEEN '$a' and '$b' OR cislo17=$i AND tah1.datum BETWEEN '$a' and '$b' OR cislo18=$i AND tah1.datum BETWEEN '$a' and '$b' OR cislo19=$i AND tah1.datum BETWEEN '$a' and '$b' OR cislo20=$i AND tah1.datum BETWEEN '$a' and '$b' ";
  2.  
nospor
naprawde na matmie nawiasow cie nie uczyli??

2*3 + 4 * 3 + 7 * 3

To jest to samo co
(2 + 4 + 7) * 3

Identycznie z OR i AND
woxala123

No wiesz najpierw wykonuje się działania w nawiasach a potem dalsze działania z wynikiem ich czyli tak aby opuścic nawias.
To tak dla przypomnienia potomnym.
  1. $sql1 = " SELECT COUNT(id) AS pocet FROM `tah1` WHERE ((cislo1=$i OR cislo2=$i OR cislo3=$i OR cislo4=$i OR cislo5=$i OR cislo6=$i OR cislo7=$i OR cislo8=$i OR cislo9=$i OR cislo10=$i OR cislo11=$i OR cislo12=$i OR cislo13=$i OR cislo14=$i OR cislo15=$i OR cislo16=$i OR cislo17=$i OR cislo18=$i OR cislo19=$i OR cislo20=$i) and (tah1.datum BETWEEN '$a' and '$b')) ";
  2.  
  3.  

Zrobiłem coś takiego. To już lepiej? I jeszcze pytanie czy da się też obliczyć pary wystepowań liczb, przy zmodyfikowaniu kodu.
Pozdrawiam
nospor
Cytat
No wiesz najpierw wykonuje się działania w nawiasach a potem dalsze działania z wynikiem ich czyli tak aby opuścic nawias.
No ja to wiem. To ty nie widziales i tworzyles potworki.

Cytat
Zrobiłem coś takiego. To już lepiej?
Zdecydowanie
woxala123
Okey cieszę się nospor że pomogłeś. Ale teraz chcę zrobi by z kolumn zliczał pary które występują ww zakresie dat. Tylko szczerze nie wiem jak do tego zabrac się . Może trochę podpowiedzi izacznę coś pisać.
nospor
No a jak dodasz do select kolejne count to nie dziala?

SELECT COUNT(id) AS pocet, count(cislo1=$i) as c1, count(cislo2=$i) as c2, .....
woxala123
Powiem tak tej opcji nie brałem pod uwagę ale stosując twój zapis
  1. $sql1 = " SELECT COUNT(id) AS pocet, (count(cislo1=$i) as c1, count(cislo2=$i) as c2) FROM `tah1` ";

przy sprawdzeniu
war_dump($sql1);
otrzymuję coś takiego
p2.php:69:string ' SELECT COUNT(id) AS pocet, (count(cislo1=1) as c1, count(cislo2=1) as c2, count(cislo3=1) as c3) FROM `tah1` '
tylko dla przykładu bo wywala 80 takich rekordów z po kolei 1do 80 i w jaki to sposób może pokazywać jakie są pary i ile ich wystąpiło?
Pozdrawiam

Mam teraz jeszcze jedno pytanie jak posortować $tah1 by wyświetlało wyniki od największej do najmniejszej.
Pozdrawiam

Cytat(nospor @ 26.09.2017, 10:39:21 ) *
No a jak dodasz do select kolejne count to nie dziala?

SELECT COUNT(id) AS pocet, count(cislo1=$i) as c1, count(cislo2=$i) as c2, .....

Okey nospor ale jak rozumiesz by ten skrypt zliczał pary liczb. Czy idzie to jakoś rozwinąc. Bo to nie za bardzo działa.
Napisałem takie zapytanie w sql
  1. SELECT concat(cislo1, " ,", cislo2) AS ror, COUNT(*) AS count FROM tah1 GROUP BY ror ORDER BY COUNT(*) DESC

Tylko bym musiał co najmniej na 20 kolumnach zrobić 190 połączeń kolumn by obliczyć wszystkie pary. Czy idzue to bardziej ukrócić.?
Pozdrawiam

Nadal mam pytanie jak posortować $tah1 od najwiekszej do najmniejszej
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.