Forum Sveta kompjutera

Nazad   Forum Sveta kompjutera > Internet > Web razvoj > Serverske aplikacije i baze podataka

Serverske aplikacije i baze podataka PHP, Perl, ASP, ASP .NET, ColdFusion...
MySQL, PostgreSQL, MSQL, Oracle...

Odgovor
 
Alatke vezane za temu Vrste prikaza
Stara 14.10.2014, 15:51   #1
vladakg
Član
 
Član od: 4.4.2008.
Lokacija: Kragujevac
Poruke: 233
Zahvalnice: 8
Zahvaljeno 3 puta na 3 poruka
Question Crtanje dijagrama

Zdravo ljudi,

Radim na nekom projektu gde izmedju ostalog trebam da crtam dijagrame sa podacima vezanim za svaki dan. E sad moja firma ima neki glupi standard, i umesto da za svaki dan se vezuju podaci samo za taj dan, oni sabiraju podatke u odnosu na prethodni dan. Primer:

Ime tabele: tag

id_tag, datum, vrednost

1, 2014-10-1, 1
2, 2014-10-1, 1
3, 2014-10-2, 1
4, 2014-10-3, 1
5, 2014-10-3, 1
6, 2014-10-3, 1
7, 2014-10-3, 1

Po ovom znaci da za 1. u mesecu imam 2 vrednosti, za 2. jednu, za 3. imam cetiri vrednosti.

E sad ja znam tako da napravim.

A meni bi trebalo na ovaj nacin:

Da za prvi imam vrednost 2, za drugi imam vrednost tri, i za treci imam vrednost 7.

Nadam se da sam malo priblizio problem, da li moze neko da mi pomogne?

Hvala unapred.
vladakg je offline   Odgovor sa citatom ove poruke
Stara 14.10.2014, 18:03   #2
Neutrino
Deo inventara foruma
 
Član od: 17.6.2011.
Poruke: 7.336
Zahvalnice: 94
Zahvaljeno 3.334 puta na 2.010 poruka
Određen forumom Re: Crtanje dijagrama

Osim u retkim slučajevima kada znaš zašto to radiš baze podataka ne treba da koristiš za skladištenje rezultata obrade podataka. Tvoja dužnost je da kreiraš bazu koja će sigurno skladištiti unete podatke (pre svega poštovati normalne forme) a za prezentaciju podataka se brine naknadna obrada (skladištene procedure, naknadni upiti, biznis logika klijentskog koda itd.)

Nisi naveo koji DBMS koristiš, pretpostaviću MySQL. Problem možeš da rešiš tako što ćeš kreirati jednu privremenu bazu i u nju smestiti sumu vrednosti grupisanih (GROUP BY) po datumu. Nakon toga podatke iz privremene tabele koristiš za računanje sukcesivne sume. Naravno problem možeš da rešiš i korišćenjem podupita pod uslovom da baza nije velika i da ne koristiš MySQL (MySQL je težak bogalj što se tiče performansi složenih upita).

Kod:
-- Privremene tabele se generisu po sesiji, brišemo potencijalno postojeće da sprečimo konflikt.
DROP TEMPORARY TABLE IF EXISTS izvestaj;
-- Kreiranje privremene tabele za skladištenje međurezultata.
CREATE TEMPORARY TABLE izvestaj (
  datum date,
  suma_po_datumu int
);

-- Unosimo rezultat sumiranja po datumu u privremenu tabelu.
INSERT INTO izvestaj
  (SELECT
    datum,
    SUM(vrednost) AS suma_po_datumu
  FROM podaci
  GROUP BY datum);

-- Generisanje krajnjeg izveštaja na osnovu međurezultata u pomoćnoj privremenoj tabeli.
SELECT
  datum,
  (@total := suma_po_datumu + @total) AS ukupno
FROM izvestaj,
     (SELECT
         @total := 0) reset_totala;
Neutrino je offline   Odgovor sa citatom ove poruke
Stara 14.10.2014, 18:20   #3
vladakg
Član
 
Član od: 4.4.2008.
Lokacija: Kragujevac
Poruke: 233
Zahvalnice: 8
Zahvaljeno 3 puta na 3 poruka
Određen forumom Re: Crtanje dijagrama

Da, koristim MySQL, drugu i ne znam :/.

Skriptu sam naravno skinuo sa neta i prilagodio svojim potrebama. U pitanju je javascript koji vuce podatke iz drugog fajla. Taj drugi fajl koji daje podatke izgleda ovako:

PHP kod:
$query 'SELECT datum, SUM(vrednost) FROM kartice WHERE id_lid=13 GROUP BY datum'
$result mysql_query$query );  
if ( !
$result ) {    
$message  'Invalid query: ' mysql_error() . "\n"
$message  'Invalid query: ' mysql_error() . "\n"
$message .= 'Whole query: ' $query
die( 
$message );  

$prefix ''
echo 
"[\n"
while ( 
$row mysql_fetch_assoc$result ) ) {  
  
$vrednost1=$row['SUM(otvaranje)']; 
echo 
$prefix " {\n";  
echo 
'"category":"'$row['datum'] .'",'."\n";  
echo 
'"value1":'$vrednost1 ','."\n"
echo 
" }";   
$prefix ",\n";  

echo 
"\n]";   
mysql_close($link); 
Da li bi mogao nekako taj podupit da se ubaci u ovu semu? Baza na kraju ne bi bila mala, ali u pitanju je localhost pa se nadam da ce malo to da olaksa posao .

P.S. Hvala na onom prvom predlogu, nego nisam bas siguran kako bih gra primenio, nisam toliko vest .
vladakg je offline   Odgovor sa citatom ove poruke
Stara 14.10.2014, 19:52   #4
Neutrino
Deo inventara foruma
 
Član od: 17.6.2011.
Poruke: 7.336
Zahvalnice: 94
Zahvaljeno 3.334 puta na 2.010 poruka
Određen forumom Re: Crtanje dijagrama

Jednostavno, ceo MySQL kod smestiš u skladišnu proceduru (http://dev.mysql.com/doc/connector-n...rocedures.html) i onda je pozoveš iz PHP koda.

Na MySQL serveru izvršiš sledeće linije kako bi kreirao skladišnu proceduru pod imenom getTotal(). Nebitno je kako ćeš to da uradiš, možeš preko SQL editora phpMyAdmin-a ili bilo kog drugog klijenta. Veoma je bitno da MySQL korisnik kojeg koristiš ima odgovarajuće privilegije.

Kod:
DELIMITER $$
CREATE PROCEDURE getTotal ()
BEGIN
  -- Privremene tabele se generisu po sesiji, brišemo potencijalno postojeće da sprečimo konflikt.
  DROP TEMPORARY TABLE IF EXISTS izvestaj$$
  -- Kreiranje privremene tabele za skladištenje međurezultata.
  CREATE TEMPORARY TABLE izvestaj (
    datum date,
    suma_po_datumu int
  )$$

  -- Unosimo rezultat sumiranja po datumu u privremenu tabelu.
  INSERT INTO izvestaj
    (SELECT
      datum,
      SUM(vrednost) AS suma_po_datumu
    FROM podaci
    GROUP BY datum)$$

  -- Generisanje krajnjeg izveštaja na osnovu međurezultata u pomoćnoj privremenoj tabeli.
  SELECT
    datum,
    (@total := suma_po_datumu + @total) AS ukupno
  FROM izvestaj,
       (SELECT
           @total := 0) reset_totala$$
END$$
DELIMITER ;
Nakon toga iskoristiš sledeći PHP kod da pozoveš proceduru. Napomena, nemoj da koristiš staru MySQL ekstenziju u PHP-u. Pređi na PDO ili makar mysqli.

PHP kod:
<?php
header
('Content-Type: text/html;charset=utf-8');
/**
 * Konfiguracija pristupa bazi.
 */
$dbconfig = array(
    
'host'     => 'localhost',
    
'dbname'   => ''// ime baze?
    
'user'     => ''// ime korisnika baze?
    
'password' => '' // lozinka?
);

try {
    
$db = new PDO("mysql:host={$dbconfig['host']};dbname={$dbconfig['dbname']}"$dbconfig['user'], $dbconfig['password'], array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES "UTF8"'));
    if (
$upit $db->query('CALL getTotal()')) {
        
$rezultati $upit->fetchAll(PDO::FETCH_ASSOC);
        if (
count($rezultati)) {
            foreach (
$rezultati as $rezultat) {
                echo 
"[{$rezultat['datum']}{$rezultat['ukupno']}<br>";
            }
        } else {
            throw new 
Exception('Nema rezultata.');
        }
    } else {
        throw new 
Exception('Neuspešan upit.');
    }
} catch (
PDOException $e) {
    echo 
"Neuspešna konekcija.";
} catch (
Exception $e) {
    
var_dump($e->getMessage());
}

Poslednja ispravka: Neutrino (14.10.2014 u 21:28) Razlog: Pogrešan delimiter
Neutrino je offline   Odgovor sa citatom ove poruke
Stara 17.10.2014, 13:26   #5
vladakg
Član
 
Član od: 4.4.2008.
Lokacija: Kragujevac
Poruke: 233
Zahvalnice: 8
Zahvaljeno 3 puta na 3 poruka
Određen forumom Re: Crtanje dijagrama

Hvala, snasao sam se
vladakg je offline   Odgovor sa citatom ove poruke
Odgovor

Bookmarks sajtovi

Alatke vezane za temu
Vrste prikaza

Vaš status
Ne možete postavljati teme
Ne možete odgovarati na poruke
Ne možete slati priloge uz poruke
Ne možete prepravljati svoje poruke

BB kod: uključeno
Smajliji: uključeno
[IMG] kod: uključeno
HTML kod: isključeno


Slične teme
tema temu započeo forum Odgovora Poslednja poruka
Crtanje i simulacija elektricnih kola I like games Aplikativni softver 10 23.8.2014 18:53
Tabla za crtanje TOTTFIROOB ŠDK - Ostale komponente 6 25.2.2012 14:31
Program za tehničko crtanje miša topola 2D radovi 2 24.7.2011 22:02
AstroPlot - Program za crtanje grafika Deimos Programiranje 3 26.3.2007 22:07


Sva vremena su po Griniču +2 h. Sada je 16:45.


Powered by vBulletin® verzija 3.8.7
Copyright ©2000–2024, vBulletin Solutions, Inc.
Hosted by Beograd.com