Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Celková suma

Aktivity
Avatar
gorri
Člen
Avatar
gorri:10.5.2019 10:51

Ahoj,
měl bych prosbu. Nevíte někdo jak si můžu z DB vypsat celkovou cenu? Chtěl jsem si napsat menší widget, který by mi po přihlášení hned zobrazil nové objednávky ale zároveň abych viděl i za kolik jsou celkem. Nicméně se mi to nedaří. Děkuji za případnou reakci a nakopnutí správným směrem.

Zkusil jsem:

SELECT SUM(cena) AS celkova_cena FROM produkty WHERE datum=?, date("Y-m-d")

Další vím, že byla hloupost ale zkusil jsem to taky.

SELECT COUNT(cena) FROM produkty WHERE datum=?, date("Y-m-d")

Chci docílit: Vypsat celkovou sumu.

Odpovědět
10.5.2019 10:51
Když vím, tak poradím. Nikdo neví všechno :-)
Avatar
Odpovídá na gorri
Neaktivní uživatel:10.5.2019 11:09

Count ti vrátí počet řádků. Příkaz se SUM vypadá v pořádku. Není problém v tom, že ho pouštíš na produkty a ne na objednané produkty?

Pokud chceš v tomhle pomoct, dej sem alespoň nástřel struktury databáze.

Editováno 10.5.2019 11:09
Nahoru Odpovědět
10.5.2019 11:09
Neaktivní uživatelský účet
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:10.5.2019 11:10

Mozna by pomohlo GROUP BY a definovat propojeni radku.

 
Nahoru Odpovědět
10.5.2019 11:10
Avatar
gorri
Člen
Avatar
Odpovídá na Neaktivní uživatel
gorri:10.5.2019 11:13

Taky si myslím, že je v pořádku. DB u produktu vypadá následovně

datum
datum_a_cas
id_objednavky
nazev_objednavky
fakturacni_adresa
dorucovaci_adresa
cena
status

Tohle je vše co u objednávky mám.

Nahoru Odpovědět
10.5.2019 11:13
Když vím, tak poradím. Nikdo neví všechno :-)
Avatar
gorri
Člen
Avatar
Odpovídá na Peter Mlich
gorri:10.5.2019 11:19

Tak nevím jestli jsem to nezadal špatně ale nefunguje

Db::query('SELECT SUM(cena) FROM objednavka WHERE datum=? GROUP BY cena', date("Y-m-d"))
Nahoru Odpovědět
10.5.2019 11:19
Když vím, tak poradím. Nikdo neví všechno :-)
Avatar
Odpovídá na gorri
Michal Haňáček:10.5.2019 11:28

Samozřejmě zadal. Klauzule GROUP BY a výčet atributů patří až za podmínku.

Nahoru Odpovědět
10.5.2019 11:28
Každé rozhodnutí a každý krok v životě nás někam posune. Bohužel jen některé nás posouvají dopředu.
Avatar
gorri
Člen
Avatar
Odpovídá na Michal Haňáček
gorri:10.5.2019 11:37

Nejsem si jistý, že jsem tě pochopil správně. Pravdou je, že s SQL se stále učím ale i takový zápis nefunguje

Db::query('SELECT cena, SUM(cena) FROM objednavka WHERE datum=? GROUP BY ?',  date("Y-m-d"), 'cena')
Nahoru Odpovědět
10.5.2019 11:37
Když vím, tak poradím. Nikdo neví všechno :-)
Avatar
Odpovídá na gorri
Tomáš Novotný:10.5.2019 11:50

Ahoj a není tam spíše problém s datovým typem? Můžeš poslat alespoň strukturu tabulky, jak píše Neaktivní uživatel? Tj. něco v duchu

CREATE TABLE `dev` (
        `devID` SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT,
        `key` VARCHAR(70) AS (concat(`nm`,'|',`sn`)) VIRTUAL,
        `descr` TINYTEXT NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci',
        `nm` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci',
        `sn` VARCHAR(19) NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci',
        PRIMARY KEY (`devID`),
        INDEX `devID_key_nm_sn` (`devID`, `key`, `nm`, `sn`)
)
COLLATE='utf8mb4_unicode_ci'
ENGINE=InnoDB;
Editováno 10.5.2019 11:52
Nahoru Odpovědět
10.5.2019 11:50
∞ ... the exact amount of possibilities how to deal with the situation ... so by calm, your solution is one of many
Avatar
gorri
Člen
Avatar
Odpovídá na Tomáš Novotný
gorri:10.5.2019 11:54

Aha. Tak to se omlouvám.
Tady to je

CREATE TABLE IF NOT EXISTS `objednavka` (
`id` int(11) NOT NULL,
  `datum` date NOT NULL,
  `datum_a_cas` datetime NOT NULL,
  `id_objednavky` int(11) NOT NULL,
  `nazev` varchar(255) NOT NULL,
  `zakaznik` varchar(255) NOT NULL,
  `adresa_doruceni` text NOT NULL,
  `fakturacni_adresa` text NOT NULL,
  `cena` int(11) NOT NULL,
  `status` int(11) NOT NULL
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
Nahoru Odpovědět
10.5.2019 11:54
Když vím, tak poradím. Nikdo neví všechno :-)
Avatar
Odpovídá na gorri
Tomáš Novotný:10.5.2019 12:07

Ač by tvá tabulka chtěla některé úpravy, i v tomto stavu by SUMa měla fungovat. A zeptám se teď hloupě, jiné dotazy ti fungují? Mířím tím k tomu, zda ti funguje ten DB wrapper, který používáš. Je správně nastaven případně generuje validní DB dotazy?

Editováno 10.5.2019 12:08
Nahoru Odpovědět
10.5.2019 12:07
∞ ... the exact amount of possibilities how to deal with the situation ... so by calm, your solution is one of many
Avatar
Petr Langer
Člen
Avatar
Odpovídá na gorri
Petr Langer:10.5.2019 12:08
SELECT SUM(cena)
FROM objednavka
WHERE datum = date("Y-m-d")
GROUP BY id

Tohle nefunguje?

 
Nahoru Odpovědět
10.5.2019 12:08
Avatar
gorri
Člen
Avatar
Odpovídá na Tomáš Novotný
gorri:10.5.2019 12:09

Zobrazování funguje. Vše funguje. Nad výpočtem jsou nové produkty a kolik jich je. To se zobrazuje.
Jen pro informaci. Jaké úpravy prosím myslíš? Rád se poučím. :-)
Děkuji

Nahoru Odpovědět
10.5.2019 12:09
Když vím, tak poradím. Nikdo neví všechno :-)
Avatar
gorri
Člen
Avatar
Odpovídá na Petr Langer
gorri:10.5.2019 12:12

Bohužel ne
Takhle je to zapsané a nejde to. Upravil jsem jen podmínku pro datum

Db::query('SELECT SUM(cena)
FROM objednavka
WHERE datum = ?
GROUP BY id', date("Y-m-d"));
Nahoru Odpovědět
10.5.2019 12:12
Když vím, tak poradím. Nikdo neví všechno :-)
Avatar
Odpovídá na gorri
Tomáš Novotný:10.5.2019 12:15

Zkusil bych otestovat místo date("Y-m-d") tam dát přímo datum "2019-05-10"... nebo nějaký, který máš v DB

Nahoru Odpovědět
10.5.2019 12:15
∞ ... the exact amount of possibilities how to deal with the situation ... so by calm, your solution is one of many
Avatar
Jaroslav Smrž
Tvůrce
Avatar
Jaroslav Smrž:10.5.2019 12:15

Ahoj, používám následující script. Pro úplnost přikládám i třídu s připojením.
sum.php

<?php

include_once('connection.php');

$database = new Connection();
$db = $database->open();
try {
    $sql = "SELECT sum(fin_castka) as total FROM finance";
    $query = $db->query($sql);
    $row = $query->fetch(PDO::FETCH_ASSOC);
    if ($row) {
        $sum = $row['total'];
    }
} catch (PDOException $e) {
    echo "Oooops! Našel se problém s připojením k databázi: " . $e->getMessage();
}
$database->close();

connection.php

<?php

Class Connection {

    private $server = "mysql:host=localhost;dbname=is";
    private $username = "root";
    private $password = "";
    private $options = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,);
    protected $conn;

    public function open() {
        try {
            $this->conn = new PDO($this->server, $this->username, $this->password, $this->options);
            return $this->conn;
        } catch (PDOException $e) {
            echo "Ooops... Spojení nelze navázat: " . $e->getMessage();
        }
    }

    public function close() {
        $this->conn = null;
    }
}
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
10.5.2019 12:15
/* Life runs on code */
Avatar
Petr Langer
Člen
Avatar
Odpovídá na gorri
Petr Langer:10.5.2019 12:20

Tak jsem si to teď vyzkoušel a s GROUP BY mi to taky nefunguje, což mi přijde divné. Bez něj to funguje.

 
Nahoru Odpovědět
10.5.2019 12:20
Avatar
gorri
Člen
Avatar
Odpovídá na Tomáš Novotný
gorri:10.5.2019 12:21

Nefunguje ani tak

Nahoru Odpovědět
10.5.2019 12:21
Když vím, tak poradím. Nikdo neví všechno :-)
Avatar
gorri
Člen
Avatar
Odpovídá na Petr Langer
gorri:10.5.2019 12:22

Pošli prosím jak to v PHP zobrazuješ.

Nahoru Odpovědět
10.5.2019 12:22
Když vím, tak poradím. Nikdo neví všechno :-)
Avatar
Jaroslav Smrž
Tvůrce
Avatar
Odpovídá na gorri
Jaroslav Smrž:10.5.2019 12:23

Stačí v sum.php změnit $sql, v connection.php zas přístupy, doplnit WHERE a mělo by ti vše fungovat. Pokud budeš mít otázky ke kódu, tak rád vysvětlím, ale myslím, že by mělo být vše jasné.

Nahoru Odpovědět
10.5.2019 12:23
/* Life runs on code */
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:10.5.2019 12:23

(priklad, se sum a group)
google = mysql group by
https://dev.mysql.com/…difiers.html

SELECT year, country, product, SUM(profit) AS profit
       FROM sales
       GROUP BY year, country, product WITH ROLLUP

https://www.tutorialspoint.com/…y-clause.htm

(se ti pokouseli rici ostatni, ze se where pise az za group)
google = mysql group by where
https://stackoverflow.com/…up-by-clause

SELECT  Service_ID, Service_Type, SUM(consumer_feedback)
FROM consumer9
GROUP BY Service_ID
WHERE Service_Type=Printer;

Mno, a tez se te ptaji, zda ti to spravne preklada dotazy z te otaznikove formy na sql dotaz. Pripadne si dej vypsat sql errory. Nejspis mas globalne potlacene chybove hlasky nebo tam nemas prikaz, aby zobrazil sql error. Takhle to vypada, ze se spatne posklada sql prikaz. Pripadne by sis mohl vypsat poskladany sql dotaz na obrazovku, jestli to ten program umoznuje a zkopirovat jej do phpmyadmina, jestli funguje nebo jaky error phpmyadmin vypise.

 
Nahoru Odpovědět
10.5.2019 12:23
Avatar
Odpovídá na gorri
Tomáš Novotný:10.5.2019 12:24

Ok, tak je potřeba se podívat spíše na třídu Db.php... patrně se to zapisuje jinak. Zkus přiložit spíše jako soubor.

Nahoru Odpovědět
10.5.2019 12:24
∞ ... the exact amount of possibilities how to deal with the situation ... so by calm, your solution is one of many
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:10.5.2019 12:26

Jo, a tez pro GROUP plati, ze bys ten samy sloupec mel mit v SELECT, tusim. Nebo mozna v nejake exoticke db jako oracle ci mssql je to nutne, nevim.

 
Nahoru Odpovědět
10.5.2019 12:26
Avatar
gorri
Člen
Avatar
gorri:10.5.2019 12:31

A není jen problém, že to píšu

Db::query('SELECT.....)

Myslím to Db::query. Jestli se to nezapisuje jinak?

Nahoru Odpovědět
10.5.2019 12:31
Když vím, tak poradím. Nikdo neví všechno :-)
Avatar
Odpovídá na gorri
Tomáš Novotný:10.5.2019 12:33

:-) no však sem plácni ten Db.php... v něm bude vidět jak se to má zapsat, aby ti to vyrobilo validní SQL dotaz...

Editováno 10.5.2019 12:34
Nahoru Odpovědět
10.5.2019 12:33
∞ ... the exact amount of possibilities how to deal with the situation ... so by calm, your solution is one of many
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:10.5.2019 12:38

Vsichni ti porad rikame, ze nevidime do tve knihovny na db, viz Tomas, musel bys dat jeji kod. Nebo si k ni najdi manual, tam bude jiste par prikladu, jak se to spravne zapisuje, abys spustil sql dotaz s otazniky a normalni.

A priklad od Jaroslav Smrž ti nefunguje? Nebo jej neumis upravit pro tve sql pripojeni? Jestli by nebylo jednodussi pouzivat jeho kod nez tridu, ve ktere se nevyznas.

 
Nahoru Odpovědět
10.5.2019 12:38
Avatar
gorri
Člen
Avatar
gorri:10.5.2019 12:46

SQL dotaz normálně spustím. Vše mi běží normálně. To je divné. Nicméně Db.php je místní.
Příklad od Jaroslav Smrž teď zkouším.

Nahoru Odpovědět
10.5.2019 12:46
Když vím, tak poradím. Nikdo neví všechno :-)
Avatar
Jaroslav Smrž
Tvůrce
Avatar
Odpovídá na gorri
Jaroslav Smrž:10.5.2019 12:50

Pro jistotu dodám, že si musíš soubor sum.php requirovat v šabloně a total vypíšeš pomocí

<?php echo $sum; ?>
Nahoru Odpovědět
10.5.2019 12:50
/* Life runs on code */
Avatar
gorri
Člen
Avatar
Odpovídá na Jaroslav Smrž
gorri:10.5.2019 12:54

Děkuji. Jde mi to vypsat. Nicméně mi bych potřeboval aby tam byly data jen za dnešní den.
Zkusil jsem provést úpravu

$query = $db->query('SELECT SUM(cena) AS total FROM objednavka WHERE datum=?',date("Y-m-d");

a chyba.

Jinak příkaz date("Y-m-d") mi funguje normálně. Pár řádku zpět mám napsané Počet objednávek a to jede.

Editováno 10.5.2019 12:54
Nahoru Odpovědět
10.5.2019 12:54
Když vím, tak poradím. Nikdo neví všechno :-)
Avatar
Jaroslav Smrž
Tvůrce
Avatar
Odpovídá na gorri
Jaroslav Smrž:10.5.2019 12:57

Tak to je jasné, že to takhle nepůjde. Máš úplně špatně závorky a uvozovky...

Nahoru Odpovědět
10.5.2019 12:57
/* Life runs on code */
Avatar
gorri
Člen
Avatar
Odpovídá na Jaroslav Smrž
gorri:10.5.2019 13:00

Máš recht. Díky za opravu. Nicméně i tak nic.

$query = $db->query("SELECT SUM(cena) AS total FROM objednavka WHERE datum=?",  date("Y-m-d"));
Editováno 10.5.2019 13:01
Nahoru Odpovědět
10.5.2019 13:00
Když vím, tak poradím. Nikdo neví všechno :-)
Avatar
Jaroslav Smrž
Tvůrce
Avatar
Odpovídá na gorri
Jaroslav Smrž:10.5.2019 13:01

Počkej, kam to píšeš vůbec? SQL dotaz musíš zapsat do proměnné $sql např.

$sql = "SELECT sum(fin_castka) as totalprijem FROM finance WHERE fin_typ='PŘÍJEM'";

pak až následuje

$query = $db->query($sql);
Editováno 10.5.2019 13:02
Nahoru Odpovědět
10.5.2019 13:01
/* Life runs on code */
Avatar
gorri
Člen
Avatar
Odpovídá na Jaroslav Smrž
gorri:10.5.2019 13:06

No takhle jsem to zrovna zapisovat nechtěl ale funguje to. Myslím, že není ani dobré to takhle zapisovat. Podle toho co jsem četl atd.
Nicméně to funguje. Děkuji

Nahoru Odpovědět
10.5.2019 13:06
Když vím, tak poradím. Nikdo neví všechno :-)
Avatar
Jaroslav Smrž
Tvůrce
Avatar
Odpovídá na gorri
Jaroslav Smrž:10.5.2019 13:10

Jak není dobré takhle zapisovat??? To fakt nechápu. Do proměnné $sql uložíš dotaz, a ten pak zpracuješ pomocí instance v Connection.php. Víš vůbec jak funguje PDO a objekty? No nic, jestli ti to funguje, tak OK, ale měl bys trochu nastudovat základy OOP.

Nahoru Odpovědět
10.5.2019 13:10
/* Life runs on code */
Avatar
gorri
Člen
Avatar
Odpovídá na Jaroslav Smrž
gorri:10.5.2019 13:16

V pohodě. Nechtěl jsem se tě nějak dotknout. Faktem je, že OOP jsem si moc neprostudoval. Nějakou dobu se k tomu už chystám.
Každopádně děkuji za řešení.

Nahoru Odpovědět
10.5.2019 13:16
Když vím, tak poradím. Nikdo neví všechno :-)
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:10.5.2019 13:20

Pokud informace mas k clanku a nepridas odkaz, tak sorac. Ja zadny clanek tady necetl, takze stale nevim, jak vypada class pro db :)

Ono se to treba nepises s carkou, jak to mas, ale parametry se davaji treba zvlast prikazem.

$query = $db->query("SELECT SUM(cena) AS total FROM objednavka WHERE datum=?");
$query->addParam(date("Y-m-d"))
 
Nahoru Odpovědět
10.5.2019 13:20
Avatar
Odpovídá na gorri
Tomáš Novotný:10.5.2019 13:20

Takže pokud používáš místní db wrapper nad pdo tak by se dala použít třeba tato statická metoda:

$db = Db::queryOne('SELECT SUM(cena) AS total FROM objednavka WHERE datum=?', date("Y-m-d"));
echo $db['total'];
Nahoru Odpovědět
10.5.2019 13:20
∞ ... the exact amount of possibilities how to deal with the situation ... so by calm, your solution is one of many
Avatar
Jaroslav Smrž
Tvůrce
Avatar
Odpovídá na gorri
Jaroslav Smrž:10.5.2019 13:21

V pohodě, není za co. Já jen že PDO ovladač je o dost dál než bylo třeba Mysqlli. Asi si nejspíš myslel vkládání proměnných do dotazu, to je ale něco trochu jiného než vložení dotazu do proměnné. Zkus na PDO kouknout třeba na www.php.net

Nahoru Odpovědět
10.5.2019 13:21
/* Life runs on code */
Avatar
gorri
Člen
Avatar
Odpovídá na Tomáš Novotný
gorri:10.5.2019 13:27

Péééécka. Toto jsem hledal. Takže jsem měl jen chybný zápis. Zkoušel jsem i

Db::queryOne(.....)

ale zobrazoval jsem si vždycky

echo ($promena['cena']);
Nahoru Odpovědět
10.5.2019 13:27
Když vím, tak poradím. Nikdo neví všechno :-)
Avatar
gorri
Člen
Avatar
Odpovídá na Jaroslav Smrž
gorri:10.5.2019 13:33

Jo to jsem měl namysli. No budu se muset na OOP podívat. Každopádně díky.

Nahoru Odpovědět
10.5.2019 13:33
Když vím, tak poradím. Nikdo neví všechno :-)
Avatar
Odpovídá na Jaroslav Smrž
Neaktivní uživatel:11.5.2019 18:05

Jaký je prosím rozdíl mezi:

$sql = "SELECT sum(fin_castka) as totalprijem FROM finance WHERE fin_typ='PŘÍJEM'";
$query = $db->query($sql);

a

$query = $db->query("SELECT sum(fin_castka) as totalprijem FROM finance WHERE fin_typ='PŘÍJEM'");
Nahoru Odpovědět
11.5.2019 18:05
Neaktivní uživatelský účet
Avatar
Jaroslav Smrž
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Jaroslav Smrž:11.5.2019 18:49

Při výpisu dat z DB žádný.

Nahoru Odpovědět
11.5.2019 18:49
/* Life runs on code */
Avatar
Odpovídá na Jaroslav Smrž
Neaktivní uživatel:11.5.2019 19:16

V tom případě nechápu tvůj komentář na který odpovídám :)

Nahoru Odpovědět
11.5.2019 19:16
Neaktivní uživatelský účet
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 42 zpráv z 42.