Součet hodnot z MYSQL v tabulce – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Součet hodnot z MYSQL v tabulce – PHP – Fórum – Programujte.comSoučet hodnot z MYSQL v tabulce – PHP – Fórum – Programujte.com

 

Konycz0
Newbie
1. 9. 2020   #1
-
0
-

Ahoj, pomoci  


<?php
 //filter.php
 if(isset($_POST["from_date"], $_POST["to_date"]))
 {
      $connect = mysqli_connect("localhost", "kony", "konyheslo", "Domacnost");
      $output = '';
      $query = "
           SELECT * FROM 3Dtisk_spotreba
           WHERE timestamp BETWEEN '".$_POST["from_date"]."' AND '".$_POST["to_date"]."'
      ";
      $result = mysqli_query($connect, $query);
      $output .= '
           <table class="table table-bordered">
                <tr>
                     <th width="5%">ID</th>
                     <th width="10%">Spotreba</th>
                     <th width="12%">Timestamp</th>
                </tr>
      ';
      if(mysqli_num_rows($result) > 0)
      {
        while($row = mysqli_fetch_array($result))
           {
              $output .= '
                     <tr>
                          <td>'. $row["id"] .'</td>
                          <td>'. $row["spotreba"] .' W</td>
                          <td>'. $row["timestamp"] .'</td>
                     </tr>
                ';
           }

      }
      else
      {
           $output .= '
                <tr>
                     <td colspan="5">Bez výsledku</td>
                </tr>
           ';
      }
      $output .= '</table>';
      echo $output;
 }
 ?>


si filtruji záznamy v SQL a vypisuji do PHP.

Ale potřeboval bych aby se mi hodnoty "spotreba" sečetly a vidělily počtem zobrazených záznamů.

Mohl by mi prosím někdo poradit ?

Nahlásit jako SPAM
IP: 89.31.43.–
1. 9. 2020   #2
-
0
-

Jedna možnost je dělat to v PHP. Provádíš cyklus, ve kterém data "skládáš" do tabulky. Zde bys spotřebu mohl sčítat do pomocné proměnné. Po cyklu bys pak mohl součet podělit počtem záznamů, který znáš.

Druhá možnost je provést to v MySQL. Hledej agregační funkci SUM

hu

Nahlásit jako SPAM
IP: 195.178.67.–
Konycz0
Newbie
1. 9. 2020   #3
-
0
-

 Přidám ještě zdroj stránke pro samotné zobrazení mimo ten filtr..

První zdroják v prvním příspevku je filter.php a druhý spotreba3D.php

<!DOCTYPE html>
<html>
 <head>
  <title>Spotreba</title>
  <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/morris.js/0.5.1/morris.css">
  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
  <script src="//cdnjs.cloudflare.com/ajax/libs/raphael/2.1.0/raphael-min.js"></script>
  <script src="//cdnjs.cloudflare.com/ajax/libs/morris.js/0.5.1/morris.min.js"></script>
           <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
           <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" />
           <script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
           <link rel="stylesheet" href="http://code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
 </head>
 <body>
<?php
//index.php
$connect = mysqli_connect("localhost", "kony", "Konyheslo", "Domacnost");
$query = "SELECT * FROM 3Dtisk_spotreba ORDER BY id desc";
$result = mysqli_query($connect, $query);
?>
<div class="container" style="width:600px;">
                <h2 align="center">Spotřeba 3D tiskárna</h2>
                <h3 align="center">Načtené hodnoty</h3><br />
                <div class="col-md-3">
                     <input type="text" name="from_date" id="from_date" class="form-control" placeholder="From Date" />
                </div>
                <div class="col-md-3">
                     <input type="text" name="to_date" id="to_date" class="form-control" placeholder="To Date" />
                </div>
                <div class="col-md-5">
                     <input type="button" name="filter" id="filter" value="Filtruj" class="btn btn-info" />
                </div>
                <div style="clear:both"></div>
                <br />
                <div id="order_table">
                     <table class="table table-bordered">
                          <tr>
                               <th width="10%">ID</th>
                               <th width="15%">Spotřeba</th>
                               <th width="20%">Datum</th>
                          </tr>
                     <?php
                     while($row = mysqli_fetch_array($result))
                     {
                     ?>
                          <tr>
                               <td><?php echo $row["id"]; ?></td>
                               <td><?php echo $row["spotreba"]; ?> W</td>
                               <td><?php echo $row["timestamp"]; ?></td>
                          </tr>
                     <?php
                     }
                     ?>
                     </table>
                </div>
                </div>
           </div>
      </body>
 </html>
 <script>
      $(document).ready(function(){
           $.datepicker.setDefaults({
                dateFormat: 'yy-mm-dd'
           });
           $(function(){
                $("#from_date").datepicker();
                $("#to_date").datepicker();
           });
           $('#filter').click(function(){
                var from_date = $('#from_date').val();
                var to_date = $('#to_date').val();
                if(from_date != '' && to_date != '')
                {
                     $.ajax({
                          url:"filter.php",
                          method:"POST",
                          data:{from_date:from_date, to_date:to_date},
                          success:function(data)
                          {
                               $('#order_table').html(data);
                          }
                     });
                }
                else
                {
                     alert("Please Select Date");
                }
           });
      });
 </script>
</html>

Zkouším to různě ale pořád to nechce spočítat

Nahlásit jako SPAM
IP: 89.31.43.–
1. 9. 2020   #4
-
0
-

   

SELECT SUM(sloupec) FROM tabulka WHERE podminka

a pak počet záznamů můžeš získávat např. pomocí funkce COUNT, nástřel

SELECT COUNT(*) FROM tabulka WHERE podminka

a po odladění předchozího bych pak zkusil vrátit jedním dotazem.

SELECT SUM(sloupec)/COUNT(*) FROM tabulka WHERE podminka

A nebo si ušetřit dumání a gůůglit aritmetický průměr v MySQL

hu

Nahlásit jako SPAM
IP: 195.178.67.–
1. 9. 2020   #5
-
+1
-
Zajímavé
Kit +
Nahlásit jako SPAM
IP: 195.178.67.–
Konycz0
Newbie
1. 9. 2020   #6
-
0
-

no ja googlim, ale v PHP se hooodne ucim a jsem uplne na zacatku

Nahlásit jako SPAM
IP: 213.211.34.–
1. 9. 2020   #7
-
0
-

To co jsem ti psal je MySQL.

hu

Nahlásit jako SPAM
IP: 193.86.81.–
Konycz0
Newbie
1. 9. 2020   #8
-
0
-

No to je to stejny :)) nevim jak to zakomponovat do stranky

Nahlásit jako SPAM
IP: 213.211.34.–
Kit+15
Guru
1. 9. 2020   #9
-
0
-

#1 Konycz 

SELECT AVG(spotreba) AS prumer FROM 3Dtisk_spotreba
    WHERE timestamp BETWEEN :fromDate AND :toDate
Nahlásit jako SPAM
IP: 213.175.43.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Konycz0
Newbie
2. 9. 2020   #10
-
0
-

A toto vlozit kam a jak pak vypsat vysledek ?

Nahlásit jako SPAM
IP: 213.211.34.–
2. 9. 2020   #11
-
0
-

Jako děláš 

$query = "
           SELECT * FROM 3Dtisk_spotreba
           WHERE timestamp BETWEEN '".$_POST["from_date"]."' AND '".$_POST["to_date"]."'
      ";
      $result = mysqli_query($connect, $query);

tak uděláš jakýkoliv jiný dotaz, třeba zrovna ten průměr. Akorát je dobré se podívat do dokumentace, zda pro vrácení jedné hodnoty (průměr je jedna hodnota) není jiná funkce než mysqli_query. 

https://www.w3schools.com/php/func_string_echo.asp ukazuje výpis od jednoduchého řetězce a také vložení obsahu proměnné do věty.

Mám pocit, že máš četné mezery v základních věcech. Doporučuji nějaký tutoriál, např na itnetwork https://www.itnetwork.cz/php  jsou velice dobré tutoriály. Možná narazíš na to, že pokračování k další lekci je zpoplatněno. Stojí to několik set Kč, sám jsem to už několikrát použil. Získané informace za to stojí.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
Konycz0
Newbie
2. 9. 2020   #12
-
0
-

ale ja vim jak se pouziva echo a vypsani promenne :ú

    $query = "
           SELECT * FROM 3Dtisk_spotreba
           WHERE timestamp BETWEEN '".$_POST["from_date"]."' AND '".$_POST["to_date"]."'
      ";
      $query2 = "
           SELECT AVG(spotreba) AS prumer FROM 3Dtisk_spotreba
           WHERE timestamp BETWEEN '".$_POST["from_date"]."' AND '".$_POST["to_date"]."'
      ";

      $result = mysqli_query($connect, $query);
      $result2 = mysqli_query($connect, $query2);

a potom

echo $result2;

ale to mi nic neudělá a hlavně to ani nevykoná z té stránky nic, protože nefunguje ani to vyhledávání, a je to určitě tím SQL dotazem. Jakmile ho zakomentuji, tak vyhledávání už zase funguje

Nahlásit jako SPAM
IP: 89.31.43.–
2. 9. 2020   #13
-
0
-

http://www.learningaboutelectronics.com/Articles/How-to-get-the-average-of-all-rows-of-a-MySQL-table-column-using-PHP.php tady získávají průměr a vypisují ho. Akorát pomocí staršího rozhraní mysql (na stackoverflow je narazil na informaci, že se již nemá používat). Přístup u mysqli bude stejný, velké rozdíly bych neočekával. Dokumentace mysqli je tady https://www.php.net/manual/en/mysqli.query.php 

Každopádně bych si vyzkoušel a odladil nejdříve samotný dotaz. Dále bych se díval, co to podle dokumentace má vrátit (jen jsem to rychle přelétl, vypadá to, že objekt). A nakonec podle dokumentace řešil, jak s výsledkem pracovat.

Jinak bych použil debugging a pokoušel se získat více informací o chybě.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
Konycz0
Newbie
2. 9. 2020   #14
-
0
-

Když vložím příkaz :

SELECT AVG(spotreba) AS average FROM 3Dtisk_spotreba

přímo přes phpmyadmin na SQl, tak to vykoná a je výsledek správný, ale nevím jak tomu docílit aby to načetlo do stránky v php :))

zkouším 

	$query = "SELECT * FROM 3Dtisk_spotreba ORDER BY id desc";
        $result = mysqli_query($connect, $query);
        $query2 =  "SELECT AVG(spotreba) AS average FROM 3Dtisk_spotreba";
        $result2 = mysqli_query($connect, $query2);                               
 

a potom zavolat

echo $result2;

Ale to nic nevypíše

Nahlásit jako SPAM
IP: 89.31.43.–
2. 9. 2020   #15
-
0
-

Kdyby sis to přečetl pořádně (myslím tohle http://www.learningaboutelectronics.com/Articles/How-to-get-the-average-of-all-rows-of-a-MySQL-table-column-using-PHP.php ), tak bys zjistil, že vypsání výsledku vyžaduje více než jen echo $result2; Navíc, je to tam podrobně popsaný. Takže bych zkusil odvodit: 

$res_with_av= mysqli_query("SELECT AVG(spotreba) AS average FROM 3Dtisk_spotreba");

$row = mysqli_fetch_assoc($res_with_av); 

$average = $row['average'];

echo ("This is the average: $average");

hu

Nahlásit jako SPAM
IP: 195.178.67.–
Konycz0
Newbie
2. 9. 2020   #16
-
+1
-
Zajímavé
Kit +

Už jsem na to přesně přišel :

	$query2 =  "SELECT AVG(spotreba) AS average FROM 3Dtisk_spotreba WHERE timestamp BETWEEN '".$_POST["from_date"]."' AND '".$_POST["to_date"]."'";
        $result2 = mysqli_query($connect, $query2);
        $row2 = mysqli_fetch_assoc($result2);
        $average = $row2['average'];

a potom

echo ("<p align=center> Průměrná spotřeba ve filtru: $average W");
Nahlásit jako SPAM
IP: 89.31.43.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 59 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý