Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Liczenie z zakresu dat.
woxala123
post 23.09.2017, 13:09:34
Post #1





Grupa: Zarejestrowani
Postów: 361
Pomógł: 12
Dołączył: 9.01.2010

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


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.  


Ten post edytował woxala123 23.09.2017, 13:11:07
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
nospor
post 24.09.2017, 18:25:13
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
woxala123
post 24.09.2017, 18:57:44
Post #3





Grupa: Zarejestrowani
Postów: 361
Pomógł: 12
Dołączył: 9.01.2010

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



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

Ten post edytował woxala123 24.09.2017, 19:03:29
Go to the top of the page
+Quote Post
nospor
post 25.09.2017, 08:32:16
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
woxala123
post 25.09.2017, 17:23:17
Post #5





Grupa: Zarejestrowani
Postów: 361
Pomógł: 12
Dołączył: 9.01.2010

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


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ć.
Go to the top of the page
+Quote Post
nospor
post 26.09.2017, 09:39:21
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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, .....


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
woxala123
post 1.10.2017, 19:02:26
Post #7





Grupa: Zarejestrowani
Postów: 361
Pomógł: 12
Dołączył: 9.01.2010

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


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

Ten post edytował woxala123 1.10.2017, 11:42:41
Go to the top of the page
+Quote Post

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: 23.06.2025 - 21:35